私はhandsontableを使用しており、 "beforeChange"イベントと "afterChange"イベントが一貫して発生するのに問題があり、データベースの更新をコミットすることを望んでいます。私は、次のコード(バージョン0.16.1)を使用しています:入れ子になった配列を手作業で編集する
HTML:
<div id="table"></div>
<div id="output"></div>
はJavaScript:
var data = [{
id: 5,
name: 'Sedan',
price: 2000,
tags: ['pink', 'purple']
}, {
id: 6,
name: 'Truck',
price: 1500,
tags: ['green', 'blue']
}, {
id: 6,
name: 'SUV',
price: 1500,
tags: null
}];
var writeMessage = function(msg) {
var output = document.getElementById("output");
var div = document.createElement('DIV');
div.innerHTML = msg;
output.insertBefore(div, output.firstChild);
console.log(msg);
};
var tableDiv = document.getElementById("table");
this.table = new Handsontable(tableDiv, {
data: data,
colHeaders: ["id", "name", "price", "tags"],
columns: [{
data: "id"
}, {
data: "name"
}, {
data: "price"
}, {
data: "tags"
}],
beforeChange: function(changes, source) {
writeMessage("beforeChange: " + changes + ": " + source);
},
afterChange: function(changes, source) {
writeMessage("After Change fired: " + changes);
if (!changes) {
return;
}
var i, idx, key, newVal, modelID;
for (i = 0; i < changes.length; i++) {
idx = changes[i][0];
key = changes[i][1];
newVal = changes[i][3];
modelID = this.getDataAtRow(idx)[0];
writeMessage("New value: " + key + ": " + newVal);
}
}
});
http://codepen.io/anon/pen/GjzrdX?editors=0010
イベントハンドラは、私が編集していたときに発動textおよびnumberフィールド、およびwhenタグの値はnullですが、タグ配列(たとえばピンク、パープル、緑、青)のデータオブジェクトでは発生しません。データ構造を変更せずにタグセルのイベントを発生させるにはどうすればよいですか?どんなアドバイスも大歓迎です!
ありがとうございます。タグの配列から文字列への変換を処理する余分なループを避けることを望んでいましたが、これが唯一の方法であると思われることに同意します。 Handsontableは驚くべきリソースであり、これは小さな回避策です。私はあなたにこれを調査する時間を割いていただき、ありがとうございます。 – user628940