2013-08-01 48 views
0

我正在構建一個響應式Web框架,該架構全部基於Backbone.js。 該計劃是爲了最終開放源代碼,並讓外部開發人員能夠修改和編輯模型上的方法。在編寫臨時插件時,我注意到我的方法沒有被覆蓋。Model.extend無法更新集合。 Backbone.js錯誤

調試後,我意識到,這是因爲在集合中設置模型屬性的時候,它不是一個指針的構造,但在收集時直接引用的構造被定義。到目前爲止,我已經設法通過在模型擴展之後立即擴展Collection的模型屬性(使用與以前完全相同的數據)來修補此問題。這似乎是Backbone中的一個普遍缺陷,或者我錯誤地使用了它。

var MyModel = Backbone.Model.extend({ 
    initialize: function() { 
     this.set("type", "original"); 
    } 
}) 

var MyCollection = Backbone.Collection.extend({ 
    model: MyModel 
}) 

MyModel = MyModel.extend({ 
    initialize: function() { 
     this.set("type", "modified"); 
    } 
}) 

var test = new MyCollection(); 
test.add({type:null}) 
test.at(0).get("type") // original 

MyCollection = MyCollection.extend({ 
    model: MyModel 
}) 

var test2 = new MyCollection(); 
test2.add({type:null}) 
test2.at(0).get("type") // modified 

似乎有點不對/多餘的外部開發者重新保存他們已經覆蓋模型的類型的任何收集的模型屬性。

任何想法或解決方法,將不勝感激。或者這是一個真正的缺陷? 我已經包含了一個jsfiddle http://jsfiddle.net/S4pcW/1/,我不確定有多少幫助,因爲它只是代碼,但是如果您將其複製並粘貼到chrome開發人員工具中,而在backbonejs.org上,您應該明白我的意思。

在此先感謝,任何想法將不勝感激。

+0

上面的代碼是沒有意義的,你想檢索與採集的'GET'方法的模型屬性。 'test.get(「type」)'將始終返回'undefined'。 – Creynders

+0

這是真的,我的錯誤,然而js小提琴是正確的代碼,並且我提到的錯誤也是一個問題。我已經修改它來反映這 – allouis

+2

這真的不是一個錯誤,沒有什麼不工作,因爲它不應該。而你的小提琴沒有測試你聲稱是什麼問題。我[更新了小提琴](http://jsfiddle.net/creynders/S4pcW/3/),您可以看到該集合使用模型的更新版本。 – Creynders

回答