我正在尝试从网格添加/加载记录,在网格外编辑它并更新observablearray和UI。
演示:http://jsfiddle.net/DiegoVieira/ckMJE/98/
正如您将注意到的,添加或编辑无法按预期工作。 如果我添加一个新项目,它会被添加到数组中并反映UI,但下次添加另一个项目时,旧项目会被添加到位。
数据是从服务器中提取的,它有30多个属性,因此构建每个属性为ko.observable的对象都不是一个选项。
e.g。
$.get('api/objects', function (data) {
self.stones(data.stones); // when the vm loads, this is empty
self.stone(data.stone); // when the vm loads, this is empty
});
提前致谢。
答案 0 :(得分:1)
通常,您希望使属性可观察。
如果无法做到这一点,那么一个选项就是删除项目并将其添加回数组,以便实际重新渲染。
当你添加“模板”石头时,你会希望它是一个副本。 ko.toJS
是获取副本的快捷方式。
所以,你可以这样做:
self.addStone = function () {
self.stonesArray.push(ko.toJS(self.stoneData));
};
并将其保存为:
self.saveStone = function (item) {
var index = self.stonesArray.indexOf(item);
self.stonesArray.remove(item);
self.stonesArray.splice(index, 0, item);
self.selectedStone(null);
};