Model.extend无法更新集合。 Backbone.js bug

时间:2013-08-01 10:21:02

标签: javascript backbone.js

我正在构建一个响应式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>

提前致谢,我们非常感谢任何想法。

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题并为此功能编写了一个小插件。

https://github.com/allouis/backbone.dynamicCollections