Backbone View说模型未定义?

时间:2013-09-22 22:00:14

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

我正试图用Backbone弄湿我的脚,但我无法弄清楚这里有什么问题:

var  ToDoApp = {
            model: Backbone.Model.extend({
                default:function(){
                    return {
                        task: '',
                        completed:false
                    }
                }
            }),
            collection: Backbone.Collection.extend({
                model: this.model
            }),
            view: Backbone.View.extend({
                model: new this.model(),
                tagName: 'li'
            })
        }
console.log(new ToDoApp.model());

我在视图的模型上得到'undefined is not a function'。发生了什么事? 此外,视图是否需要在那里有模型?对不起,如果这是一个非常基本的问题,我仍然不太了解骨干是如何运作的。

1 个答案:

答案 0 :(得分:1)

这部分:

collection: Backbone.Collection.extend({
    model: this.model
})

将在您构建ToDoApp时执行,但this当时不会ToDoAppthis可能会window和{ {1}}不会有window属性。结果是你实际上在说:

model

类似的问题发生在这里:

collection: Backbone.Collection.extend({
    model: undefined
})

最简单的方法是逐件构建view: Backbone.View.extend({ model: new this.model(), tagName: 'li' })

ToDoApp

然后在创建视图实例时为视图实例创建模型:

var ToDoApp = { };
ToDoApp.model = Backbone.Model.extend({ ... });
ToDoApp.collection = Backbone.Collection.extend({
    model: ToDoApp.model
});
ToDoApp.view = Backbone.View.extend({
    tagName: 'li'
});

此外,使用var model = new ToDoApp.model(); var view = new ToDoApp.view({ model: model }); ToDoApp.ModelToDoApp.Collection等名称对您的“班级”更为常见。