我正在尝试用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
不会是ToDoApp
,this
可能是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.Model
,ToDoApp.Collection
和ToDoApp.View
之类的名称更为常见。