更新映射的敲除对象的子部分

时间:2013-02-03 11:03:36

标签: javascript knockout.js knockout-mapping-plugin

我知道这个问题听起来很熟悉,但我已经阅读了很多类似的问题,并且无法找到我的具体情况。

我有一个名为gds(GlobalDataStructure)的javascript对象。顾名思义,这个对象包含了我项目所有网页所需的所有信息,并存储在localStorage中(因此我不仅仅是更新视图模型而且需要首先映射)。它包含通过AJAX读取的各种feed。

我使用构造函数来创建gds。为了大规模简化这个结构并希望这个问题简单,让我们说gds是

function gdStructure(){
    this.lastUpdate = new Date(2010,1,1);
    this.family = new Object();
    this.series = new Object();
    this.product = new Object();
}

所以我有

gds= new gdStructure();

然后,一旦我使用初始Feed中的数据填充js数组,我就会执行以下操作。

    viewmodel = ko.mapping.fromJS(gds);
    ko.mapping.fromJS(gds,viewmodel);

然后使用

将视图模型绑定到每个页面
ko.applyBindings(viewmodel);

所以这一切都没问题。例如,当我获得新的家庭供稿并且我想要更新该对象时,会出现此问题。我可以做以下

gds.family=feed;
ko.mapping.fromJS(gds,viewmodel);

所有这些都可以正常工作,但每次都是映射一个MASSIVE JS对象。这非常慢,所以我需要找到一种方法,我可以只更新已更改的Feed。理想情况下...... ..

ko.mapping.fromJS(gds.family, viewmodel.family);

但这似乎不起作用。也因为它是一个我不能做的对象。

viewmodel.family(gds.family)

任何人都可以帮助我吗?我相信这一定很简单。

感谢您的期待。

1 个答案:

答案 0 :(得分:0)

我认为你误解了lib是如何工作的,这部分看起来很奇怪

viewmodel = ko.mapping.fromJS(gds);
ko.mapping.fromJS(gds,viewmodel);

您将定义用作数据吗?

无论如何,我使用像这样的ko.mapping(有点简化,但我认为你明白了)

http://jsfiddle.net/QtyGd/1/