【问题标题】:backbonejs: the collection initialize in view module have only one model主干js:视图模块中初始化的集合只有一个模型
【发布时间】:2012-05-25 11:11:16
【问题描述】:

我有一个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

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

【问题讨论】:

标签: javascript collections backbone.js


【解决方案1】:

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

【讨论】:

  • 这也解释了为什么当他将defaults更改为default时它可以正常工作
【解决方案2】:

我认为您的问题在于您的 localdata 中存在的对象。
你的localdata 中有多少对象有不同的id 字段
您应该为 localdata 数组中的每个对象提供不同的 ID,或者只是从模型 LayerModel 中的 defaults 中删除 id 字段

每当您将名称从 defaults 更改为 default 时,因为没有默认 id 主干将其作为新模型并因此将其添加到集合中。

因此您可以更改 @987654330 @ 到任何其他名称,例如abc,它的行为相同

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2014-06-22
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多