knockoutjs - 使用外部表单从网格编辑项目

时间:2012-11-27 02:17:54

标签: knockout.js

我正在尝试从网格添加/加载记录,在网格外编辑它并更新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
    });

提前致谢。

1 个答案:

答案 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);
};

示例:http://jsfiddle.net/rniemeyer/ckMJE/99/