1

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

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

4

1 回答 1

1

这部分:

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

将在您构建时执行ToDoAppthis不会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.ModelToDoApp.CollectionToDoApp.View常见。

于 2013-09-22T22:29:28.917 回答