我正在构建一个响应式Web框架,该架构全部基于Backbone.js。 该计划最终是为了开源,并让外部开发人员能够修改和编辑模型上的方法。在编写临时插件时,我注意到我的方法没有被覆盖。
调试之后,我意识到这是因为在集合中设置model属性时,它不是指向构造函数的指针,而是在定义集合时直接引用构造函数。到目前为止,我已经设法通过在模型扩展后立即扩展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
外部开发人员重新定义任何包含他们已覆盖的模型类型的Collection的模型属性似乎有点错误/多余。
任何想法或变通方法都将不胜感激。或者这是一个真正的缺陷? 我已经包含了一个jsfiddle http://jsfiddle.net/S4pcW/1/,我不知道有多少帮助,因为它只是代码,但如果你将它复制并粘贴到chrome开发工具中,而在backbonejs.org上,你应该看到我的意思。 / p>
提前致谢,我们非常感谢任何想法。