将模型添加到集合抛出错误“未捕获的TypeError:无法读取未定义的属性'idAttribute'”

时间:2017-06-07 16:08:07

标签: javascript backbone.js backbone-collections backbone-model

我在尝试将多个模型从服务器添加到集合时遇到错误。它抛出错误:

Uncaught TypeError: Cannot read property 'idAttribute' of undefined

这是一个给出相同错误的测试示例:

<script type="text/javascript" src="js/jquery.3.2.1.min.js"></script>
<script type="text/javascript" src="js/underscore.1.8.3.min.js"></script>
<script type="text/javascript" src="js/backbone.1.3.3.min.js"></script>

<script type="text/javascript">

    var Mymodel = Backbone.Model.extend({
        defaults:{
            id: null,
        },
        idAttributes: "id",
        render: function(){
            collection.add([{id:1, name: "name"},{id:2, name: "name"}])
        }
    });

    mymodel = new Mymodel();

    var mycollection = Backbone.Collection.extend({ model: mymodel });

    collection = new mycollection();

    mymodel.render();

</script>

1 个答案:

答案 0 :(得分:1)

集合类的model property应该是模型构造函数,而不是实例。

Backbone.Collection.extend({ model: Mymodel });

模型类有idAttribute property,单数,默认情况下已为'id'

id属性放在defaults中是不必要的,可能会导致出现问题。

除了前面几点之外,在模型中进行渲染是不好的做法。请使用view

render: function(){
    collection.add([{ id:1, name: "name" }, { id:2, name: "name" }])
}

我知道这是一个测试示例,但如果不是,则模型不应更改全局集合实例。课程的重点是将责任范围限定在课堂本身而不是课堂之外。

使用像这样的全球性只是违背了使用Backbone的全部要点。

需要最少的代码

var MyModel = Backbone.Model.extend({}),
    MyCollection = Backbone.Collection.extend({ model: MyModel }),
    collection = new MyCollection();

collection.add([
    { id: 1, name: "name" },
    { id: 2, name: "name" }
]);