2014-02-12 39 views
1

我想知道如何將包含屬性和模型的骨幹集合的JSON序列化到JSON中。串行化到JSON中包含屬性的Backbone集合

所以每舉例來說,如果我有這樣一個集合:

var myCollection = Backbone.Collection.extend({ 

    initialize: function (attr, options) { 
     this.property = options.property; 
    } 
}); 

當試圖與JSON.stringify(myCollection)將函數字符串化,該字符串化將調用在骨幹集合對象定義的對象的toJSON方法。骨幹集合定義該方法如下:

toJSON : function() { 
    return this.map(function(model){ return model.toJSON(); }); 
} 

這意味着,只有包括在集合中的模型將被包括在結果JSON對象但不集合的屬性我先前所定義。

你知道這可以實現嗎?

謝謝。

編輯:也許不是在我原來的問題不夠清楚,我知道我可以覆蓋的toJSON方法我的問題是究竟如何做才能達到我需要在一般情況下(不僅是這個特定的屬性,但想象我有另一個包含其他屬性的集合,並且它們都從一個baseCollection對象繼承。更多我想知道如何將該JSON對象恢復到主幹原始狀態(不確定是否通過創建傳遞JSON的新集合對象在構造函數的參數中會用這個屬性來實現)

回答

0

你可以重載MyCollection類中的「toJSON」方法並返回你想要的字符串。

0

您可以像@ trunal-bhanse所說的那樣覆蓋toJSON方法,但如果您的目標是將該數據與服務器同步,那麼您應該可以找到更好的表示該數據的方法。默認情況下,骨幹集合在您對其中一個實例調用toJSON時會返回一個數組。然後該數組在被髮送到服務器之前被轉換爲使用JSON.stringify的字符串。然而,JSON.stringify方法將不包括你的陣列上設置任何屬性:

var test = ["foo", "bar", "baz"]; 
test.Hello = "World!"; 
console.log(test); // ["foo", "bar", "baz", Hello: "World!"] 
JSON.stringify(test); // '["foo", "bar", "baz"]' 
+0

在這種情況下,我不希望將其保存在服務器上,但暫時將它保存在localStorage的。你所描述的是我暴露的問題,我不確定如何重寫toJSON方法來完成我所需要的。 –

+0

@JavierTarazaga將它保存到'localStorage'不會對你有任何好處,除非你還計劃重寫'JSON.parse'方法。即使你重寫了集合上的'toJSON'方法,並設法將一個無效的JSON字符串存儲到'localStorage',你仍然有*檢索*並且稍後解析該字符串的問題。 – idbehold