2017-12-25 169 views
6

私はhandsontable jsプラグインを使用しています。私はafterChangeフックにgetCellMeta機能を使用したいが、動作していません。 私はfunction after afterChangeフックを使用すると機能が動作しています。しかし、afterChangeフックで作業していません。HandsontableでafterChangeでgetCellMetaを使用するには?

var container = document.getElementById('t1'), 
    options = document.querySelectorAll('.options input'), 
    table, 
    hot; 

hot = new Handsontable(container, {  
    autoWrapRow: true, 
    startRows: 81, 
    startCols: 206, 
    autoColumnSize : true, 
    stretchH: 'all', 
    afterChange : function(change,source) { 
     if (source === 'loadData') { 
     return; 
     } 
     var test = this.getCellMeta(change[0],change[1]); // not working, not return "id" meta 
     console.log(test); 
    } 
}); 

$.ajax({ 
    url: 'path', 
    type: 'GET', 
    dataType: 'json', 
    success: function (res) { 
    var data = [], row, pc = 0; 
    for (var i = 0, ilen = hot.countRows(); i < ilen; i++) 
    { 
     row = []; 
     for (var ii = 0; ii<hot.countCols(); ii++) 
     { 
     hot.setCellMeta(i,ii,'id',res[pc].id); 
     row[ii] = res[pc].price; 
     if(pc < (res.length-1)) { 

     pc++; 
     } 
     } 
     data[i] = row; 
    } 
    hot.loadData(data); 
    } 
}); 

var test = this.getCellMeta(0,0); // is working, return "id" meta 
console.log(test); 

出力コンソールログ試した後に変更してください。 enter image description here

afterChangeで出力コンソールログを使用。

変更後のセルメタの取得方法は?

ありがとうございました。あなたはほとんどそこにいる

+0

私はこのプラグインに慣れていませんが、ドキュメントにはbeforeGetCellMetaとafterGetCellMetaのみが表示されています。 getCellMetaはどこから来たのですか? – kshikama

+0

[link](https://image.prntscr.com/image/pSN__mN-RpCONgy_320krA.png)@kshikama –

答えて

3

は、ちょうど小さなミスは、あなたのコールバックであります。

編集した細胞のそれぞれについての情報を含む2次元配列:doc for afterChangeは、コールバックの第一引数(changes)があることを指定します [[row, prop, oldVal, newVal], ...]

ので、(一つだけがあると仮定して)影響を受けたセルの行/ COLの「メタ」を取得するには、たとえばthis.getCellMeta(change[0][0],change[0][1])を呼び出す必要があります。

var hot = new Handsontable(container, { 
    /* rest of init... */ 
    afterChange : function(changes,source) { 
     console.log("Changes:", changes, source); 
     if (changes) { 
      changes.forEach(function(change) { 
       var test = hot.getCellMeta(change[0],change[1]); 
       console.log(test.id, test); // 'id' is the property you've added earlier with setMeta   
      }); 
     } 
    } 
}); 

demo fiddleを参照、オープンJSコンソール、テーブル内の任意の変化(単数または複数)を作る:変化の全体の配列を読み取る

例。

関連する問題