0
我想修改我的底层数据对象并获取页面上的能够更新并显示新列。数据对象更新正常,但不会触发UI的重新呈现。KnockoutJS - 当属性添加到对象时添加列
我有什么不明白的?
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>
和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'
}
有可观察到的数组中没有“新”的项目,所以它不会触发可观察的事件。您可以尝试手动触发更新。 – user3297291