1

我正在尝试从网格中添加/加载记录,在网格之外对其进行编辑并更新 observablearray 和 UI。

演示:http: //jsfiddle.net/DiegoVieira/ckMJE/98/

您会注意到,添加或编辑没有按预期工作。如果我添加一个新项目,它确实会添加到数组中并反映 UI,但是下次我添加另一个项目时,旧项目会被添加到位。

数据是从服务器中提取的,它有 30 多个属性,因此构建对象时每个属性都为 ko.observable 不是一种选择。

例如

    $.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
    });

提前致谢。

4

1 回答 1

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/

于 2012-11-27T02:52:57.500 回答