1

我有一个模型,它包含一个带有一些 Backbone.Collections 的默认对象。我不知道这是否是最优雅的解决方案,但它现在适合我的需要。但是,当创建模型的新实例时,不会重置集合,而是添加新模型。不应该自动重置默认值吗?我现在必须在初始化函数中设置 myCols。

var MyModel = Backbone.Model.extend({

    defaults: {
        'someProp': '',
         'myColls': {
            'first': new Backbone.Collection(),
            'second': new Backbone.Collection(),
            'third': new Backbone.Collection()
         }
    },

    initialize: function() {
        // This does reset myColls:
        this.set('myColls', {
            'first': new Backbone.Collection(),
            'second': new Backbone.Collection(),
            'third': new Backbone.Collection()
        });

    }
}
4

1 回答 1

3

正如关于Model.defaults的 Backbone 文档中所说

请记住,在 JavaScript 中,对象是通过引用传递的,因此如果您包含一个对象作为默认值,它将在所有实例之间共享。相反,将默认值定义为函数。

所以,

var MyModel = Backbone.Model.extend({
    defaults: function() {
        return {
            'someProp': '',
            'myColls': {
                'first': new Backbone.Collection(),
                'second': new Backbone.Collection(),
                'third': new Backbone.Collection()
             }
        };
    },
    initialize: function() {
    }
});
于 2013-04-16T07:44:55.093 回答