2013-10-01 14 views
1

假設您正在定義Backbone.js模型。從我們的文檔...Backbone.js:當使用集合獲取屬性時,將屬性本地傳遞給模型

new Model([attributes], [options]) 

這似乎很適合將一些默認屬性傳遞給模型。傳遞時,模型將自動繼承這些屬性及其各自的值。沒事做。真棒!

他們另一方面讓我們說我們有一個該模型的集合。

new Backbone.Collection([models], [options]) 

好的,很酷,我們可以通過一些初始模型和一些選項。但是,我沒有初始模型,也沒有我需要通過的選項,所以讓我們繼續。我將從服務器獲取模型。

collection.fetch([options]) 

那麼我沒有任何選擇,但我想傳遞一些屬性,以添加到每個模型,因爲它被提取。我可以通過將它們作爲選項進行傳遞,然後將它們添加到模型初始化中的屬性哈希值中,但這似乎很麻煩。

他們是一個Backbone.js原生的方式來做到這一點?

+1

您可以將屬性作爲選項傳遞給'fetch'並覆蓋集合中的'parse'方法,以在模型上設置傳遞的選項(屬性)。看看[解析](http://backbonejs.org/#Collection-parse)。 – fbynite

回答

2

您可以將屬性作爲選項傳遞給fetch並替代集合的parse方法來擴展響應中傳遞的選項(屬性)。

的解決辦法如下所示:

var Collection = Backbone.Collection.extend({ 
    url:'someUrl', 
    parse:function(resp,options) { 
    if (options.attributesToAdd) { 
     for (var i=0;i<resp.length;i++) 
     _.extend(resp[i],options.attributesToAdd); 
    } 
    return resp; 
    } 
}); 

然後,當你在收集調用fetch添加屬性,您可以:

var collection = new Collection(); 

collection.fetch({ 
    attributesToAdd:{foo:'bar',more:'foobar'} 
}); 

你可能需要調整一下代碼與你的JSON結構一起工作,但希望這會讓你開始正確的方向。

+0

很好的回答和解釋,非常感謝!它非常簡單直接。但我很驚訝,我們不能只在Backbone Collection上設置屬性,並將該屬性傳遞給我們所有的模型。 – modulitos

相關問題