Ich versuche, mein zugrunde liegendes Datenobjekt zu modifizieren und die Fähigkeit auf der Seite zu erhalten, die neuen Spalten zu aktualisieren und anzuzeigen. Das Datenobjekt wird ordnungsgemäß aktualisiert, löst jedoch kein erneutes Rendern der Benutzeroberfläche aus.KnockoutJS - Spalte hinzufügen, wenn Eigenschaft zu Objekt
Was habe ich nicht verstanden?
http://jsfiddle.net/Xpx7f/198/
<table>
<thead>
<tr data-bind="foreach: columnNames">
<th> <span data-bind="text: $data"></span>
</th>
</tr>
</thead>
<tbody data-bind="foreach: items">
<tr data-bind="foreach: $parent.columnNames">
<td><input data-bind="value: $parent[$data]"></td>
</tr>
</tbody>
</table>
Und das Javascript:
var vm;
window.onload = function() {
var VM = function() {
var self = this;
self.items = ko.observableArray();
self.columnNames = ko.computed(function() {
if (self.items().length === 0)
return [];
var props = [];
var obj = self.items()[0];
for (var name in obj)
props.push(name);
return props;
});
};
vm = new VM();
ko.applyBindings(vm);
vm.items.push({
'Name': 'John',
'Age': 25
});
vm.items.push({
'Name': 'Morgan',
'Age': 26
});
// Add an extra property to each object
for (var i = 0; i < vm.items().length; i++) {
vm.items()[i].Weight = '50kg';
}
// ????? Table should update with new column 'Weight'
}
Es gibt kein „neues“ Element in der beobachtbaren Array, also löst es kein Observables aus. Sie können versuchen, ein Update manuell auszulösen. – user3297291