2013-02-03 33 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