我知道这个问题听起来很熟悉,但我已经阅读了很多类似的问题,并且无法找到我的具体情况。
我有一个名为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)
任何人都可以帮助我吗?我相信这一定很简单。
感谢您的期待。
答案 0 :(得分:0)
我认为你误解了lib是如何工作的,这部分看起来很奇怪
viewmodel = ko.mapping.fromJS(gds);
ko.mapping.fromJS(gds,viewmodel);
您将定义用作数据吗?
无论如何,我使用像这样的ko.mapping(有点简化,但我认为你明白了)