Ich benutze handsontable und habe Probleme, die "beforeChange" und "afterChange" -Ereignisse konsequent zu feuern, die ich hoffe, verwenden Sie Updates für die Datenbank zu übernehmen. Ich verwende den folgenden Code (Version 0.16.1):Handsontable Bearbeitung geschachteltes Array
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
Die Ereignishandler ausgelöst wird, wenn ich die Bearbeitung der Text- und Zahlenfelder und für die When-Tags sind null, aber feuern nicht für Datenobjekte mit Tag-Arrays (zB pink, purple; grün, blau). Wie kann ich die Ereignisse für die Tag-Zellen auslösen, ohne die Datenstruktur zu ändern? Jeder Rat würde sehr geschätzt werden!
danke. Ich hatte gehofft, dass die zusätzliche Schleife die Array-zu-String-Konvertierung der Tags behebt, aber ich stimme Ihnen zu, dass dies der einzige Weg zu sein scheint und sicherlich kein Deal-Breaker ist. Handsontable war eine erstaunliche Ressource, und dies ist eine kleine Problemumgehung. Ich schätze es, dass Sie sich die Zeit genommen haben, dies zu untersuchen. – user628940