2013-02-03 30 views
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); 

而且一切都会正常工作,但被映射一个巨大的JS对象的时候。这是非常缓慢的,所以我需要找到一种方法,只更新已更改的提要。理想情况下类似..

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

但这似乎不工作。也因为它是一个对象,我不能这样做。

viewmodel.family(gds.family) 

有人能帮助我吗?我相信这一定很简单。

感谢您的期待。

回答

0

我想你已经missunderstood怎样的lib工程,

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

您使用定义数据这一部分看起来很奇怪吗?

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

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

+0

感谢您的答复。当然 viewmodel = ko.mapping.fromJS(gds) 创建视图模型数据结构并将所有键设置为ko.observables和Arrays为Knockout Arrays。这是我理解它的工作方式? 然后 ko.mapping.fromJS(gds,Viewmodel)使用gds中的最新数据更新视图模型。 这是不正确的!否则,如何定义视图模型,因为阵列结构变化巨大且庞大,因此首先映射的目的是什么? – Wongadob

+0

gds和viewmodel是你的代码中的同一个对象,实际的数据是否进入图片?看我的小提琴如何去做。有一个模型和数据 – Anders

+0

数据读入一个饲料并存储在GDS中。然后将其映射到Viewmodel。由于GDS需要在localStorage中进行排序,因此GDS不能成为淘汰赛视图模型。如果我存储视图模型,我将存储函数而不是数据。我知道它可以在存储之前转换回JS,但由于这些数据是从Feed中随时更新的,所以我不想在整个viewmodel中一直这样做。 – Wongadob