1

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

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

我使用构造函数来创建 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();

然后,一旦我用来自初始提要的数据填充了 js 数组,我将执行以下操作。

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

然后将视图模型绑定到每个页面

ko.applyBindings(viewmodel);

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

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

一切都可以正常工作,但每次都映射一个 MASSIVE JS 对象。这非常慢,因此我需要找到一种方法来仅更新已更改的提要。理想情况下像..

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

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

viewmodel.family(gds.family)

有谁能够帮我?我相信这一定很简单。

感谢期待。

4

1 回答 1

0

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

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

您使用定义作为数据?

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

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

于 2013-02-03T12:22:38.627 回答