2016-06-30 17 views
3

私はhandontableをユーザーから取得するために実装しました。 これはQuizQuestionControllerプロセスデータのstoreBulk()機能私のスクリプト予期せぬ数の列を与える手がかり

<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('[email protected]') }}', 
       '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> 

です。

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に空のままにされている行のために、私は[null,null,null,null,null,null,null]としてそれらの行のためのdataを取得する必要があります。しかし、そうではありません。いくつかの行については、[null,null,null,null,null](5つの値のみ)が得られます。したがってErrorExceptionUndefined offset: 5となります。

私はこれが最初の5行だけに起こっていることに気付きました。何が問題なの?

答えて

2

問題を特定しました。

私はこれが最初の5行だけに起こっていることに気付きました。 の問題は何ですか?

5handsontableいるデフォルトのstartRowsプロパティがあります。したがって、最初の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; 

すべて正常に動作します。

0

hotInstance.getData()の代わりにhotInstance.getSourceData()を試しましたか?このメソッドの機能は、他の人に同様の問題を引き起こしている最新のリリースで変更されました。

関連する問題