JavaScript — Handsontable дает неожиданное количество столбцов

Я реализовал handsontable для получения данных от пользователя.
Это мой сценарий

<script type="text/javascript">
$(document).ready(function() {
$('#quiz_questions').handsontable({
rowHeaders: true,
colHeaders: ['Question', 'Option 1', 'Option 2', 'Option 3', 'Option 4', 'Answer', 'Marks'],
columns: [
{
type: 'text',
allowEmpty: false
},
{
type: 'text',
allowEmpty: false
},
{
type: 'text',
allowEmpty: false
},
{
type: 'text',
allowEmpty: true
},
{
type: 'text',
allowEmpty: true
},
{
type: 'dropdown',
source: ['Option 1', 'Option 2', 'Option 3', 'Option 4'],
allowEmpty: false
},
{
type: 'numeric',
allowEmpty: false
}
],
stretchH: 'all',
minSpareRows: 0,
minSpareColumns: 0,
minRows : 25
});

var hotInstance = $("#quiz_questions").handsontable('getInstance');

$('#btnSave').click(function(e){
e.preventDefault();
$('#btnSave').prop("disabled", true);
//alert('btnclicked');

var dynFrm = $('<form>', {
'action': '{{ action('QuizQuestionController@storeBulk') }}',
'method': 'POST'
}).append($('<input>', {
'type': 'hidden',
'name': '_token',
'value': '{{ csrf_token() }}'
})).append($('<input>', {
'type': 'hidden',
'name': 'quiz_id',
'value': '{{ $quiz->quiz_id }}'
})).append($('<input>', {
'type': 'hidden',
'name': 'data',
'value': JSON.stringify(hotInstance.getData())
}));
dynFrm.appendTo(document.body).submit();
});

});

</script>

storeBulk() функция QuizQuestionController обрабатывает данные.

public function storeBulk()
{
// get the quiz model
$quiz = Quiz::findOrFail(Input::get('quiz_id'));

// get the data
$data = Input::get('data');
$jData = json_decode($data);

//process the recevied data
foreach($jData as $row) {
$quizQuestion = new QuizQuestion();

$quizQuestion->quiz_id = $quiz->quiz_id;
$quizQuestion->question_no = $cnt;
$quizQuestion->question_text = trim($row[0]) ? : null;
$quizQuestion->options = $this->processOptions([
trim($row[1]),
trim($row[2]),
trim($row[3]),
trim($row[4])
]);
$quizQuestion->answer = $this->processAnswer($row[5]);
$quizQuestion->marks = trim($row[6]) ? : null;

...
}

Теперь проблема в том, что строки, оставленные пустыми в handsontable при заполнении данных я должен получить data для этих строк, как [null,null,null,null,null,null,null], Но это не так. Для некоторых строк я получаю [null,null,null,null,null] (только 5 значений). Таким образом я получаю ErrorException поговорка Undefined offset: 5,

Я заметил, что это происходит только для первых 5 строк. В чем может быть проблема?

3

Решение

Определил проблему.

Я заметил, что это происходит только для первых 5 строк. Что может быть
проблема?

Есть startRows собственностью handsontable который по умолчанию 5, Отсюда проблема с первыми 5 строками. Я установил свойство явно

startRows: 0,

А также модифицировал storeBulk() функция игнорировать ошибки.

$quizQuestion->question_text = trim(@$row[0]) ? : null;
$quizQuestion->options = $this->processOptions([
trim(@$row[2]),
trim(@$row[3]),
trim(@$row[4]),
trim(@$row[5])
]);
$quizQuestion->answer = $this->processAnswer(@$row[6]);
$quizQuestion->marks = trim(@$row[7]) ? : null;

Теперь все работает правильно.

2

Другие решения

Вы пытались использовать hotInstance.getSourceData() вместо hotInstance.getData()? Функциональные возможности этого метода изменились с его последней версией, которая вызывала аналогичные проблемы для других людей.

0

По вопросам рекламы [email protected]