2013-08-01 47 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

回答