2013-11-21 75 views
1

當我使用ko.toJSON將敲除對象序列化爲JSON,然後使用ko.mapping.fromJSON從JSON反序列化多次時,加載的對象具有這個遞歸增長的__ko_mapping__屬性。Knockout映射:JSON在映射和保存多次時增長

示例代碼:

var joe = new Person(); 
for (var i = 0; i < 10; i++) { 
    var json = ko.toJSON(joe); 
    joe = ko.mapping.fromJSON(json); 
} 

簡單的jsfiddle再現它:

http://jsfiddle.net/Gc89Q/1/

我怎樣才能加載和保存多次,而無需序列化JSON形式成長爲巨大?

我正在考慮只是在加載時將__ko_mapping__屬性設置爲undefined,但是想知道是否有更好的方法或者我缺少的東西。

這是我提交的一個問題的錯誤?

回答

1

不要覆蓋模型。相反,它傳遞給fromJSON所以模型更新:

ko.mapping.fromJSON(json, joe); 

http://jsfiddle.net/Gc89Q/2/

+0

所以在我的實際使用情況下,我加載和保存頁面加載的JSON到HTML5的localStorage。 當我第一次加載頁面時,我應該先創建一個新的空白人,然後將其作爲第二個參數傳遞給'ko.mapping.fromJSON',而不是使用1個參數'fromJSON'? – stephenbez

+0

如果您創建一個新的空白人,請傳遞1個參數:'var joe = ko.mapping.fromJSON(json)'(或'fromJS',如果它是普通的JS對象)。然後,如果您想在之後更新該人員,請使用上面的2個參數。 – sroes