backbonejs:视图模块中的集合初始化只有一个模型

时间:2012-05-25 11:11:16

标签: javascript collections backbone.js

我有model

window.LayerModel = Backbone.Model.extend({

        defaults:{
            'id':'unknow',
            'type':'unkonw',
            'preId':'unknow',

            'data': {}
        }
}

然后我定义了一个集合:

window.LayerManageCollection = Backbone.Collection.extend({
            model: LayerModel
    }) 

然后我在视野中初始化它:

        window.LayerMasterManageView = Backbone.View.extend({

              initialize: function () {
                  //here I have a gobal javascript variable named "localdata"
                  //which have 17 items in an array,each of them is object type

                  this.collection = new LayerManageCollection(localdata);
                  console.log('this collection', this.collection);
              }
}

但是集合的长度是1!,只有一个模型!,

奇怪的是,如果将"defaults"更改为"default",则收集结果符合我的要求,长度为17

为什么会这样?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

模型的默认idAttributeid。因为您在id中定义了defaults,所以您将始终创建相同的模型,因为在创建重复模型时,Backbone会安静地出错,这就是您只能看到1个模型的原因。

答案 1 :(得分:0)

我认为您的问题与localdata中存在的对象有关 localdata中有多少个对象具有不同的id字段
您应该为localdata数组中的每个对象提供不同的ID,或者只删除模型iddefaults的{​​{1}}字段。
每当您将名称从LayerModel更改为defaults时,因为没有默认ID骨干将其作为新模型,因此将其添加到集合中。

因此您可以将default更改为任何其他名称,例如defaults,它会有相同的行为