我正在尝试用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());


我在视图的模型上得到一个“未定义的不是函数”。这是怎么回事?
另外,视图甚至需要在那里建立模型吗?抱歉,如果这是一个非常基本的问题,我仍然不太了解骨干网的工作原理。

最佳答案

这部分:

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


将在构建ToDoApp时执行,但那时this不会是ToDoAppthis可能是window,而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.CollectionToDoApp.View之类的名称更为常见。

10-07 14:21