Javascript 在主干网中,此模型未定义,为什么?

Javascript 在主干网中,此模型未定义,为什么?,javascript,backbone.js,backbone-views,Javascript,Backbone.js,Backbone Views,我到处寻找答案,但对我的发现并不满意 问题是,我正在做一个Addy Osmani的教程,在主干网中制作一个“Todo”应用程序,但是当我查看控制台时,我收到一个错误,说this.model未定义 我甚至尝试过这样的答案,但我仍然得到同样的错误。请告诉我怎么了 顺便问一下,什么是这个.model或这个.collection?我有一个想法,它们指的是Backbone.Model和Backbone.Collection,但它们是如何工作的呢?我这样问是因为在另一个教程this.collection和t

我到处寻找答案,但对我的发现并不满意

问题是,我正在做一个Addy Osmani的教程,在主干网中制作一个“Todo”应用程序,但是当我查看控制台时,我收到一个错误,说
this.model未定义

我甚至尝试过这样的答案,但我仍然得到同样的错误。请告诉我怎么了

顺便问一下,什么是
这个.model
这个.collection
?我有一个想法,它们指的是
Backbone.Model
Backbone.Collection
,但它们是如何工作的呢?我这样问是因为在另一个教程
this.collection
this.model.models
中,当我清楚地定义了
model
collection
时,模型也没有定义

非常感谢

JS:


您需要实例化
模型
集合
,并将其传递给视图。否则,在TodoView上调用render方法时,
this.model
将为空

例如,尝试如下重新排列代码的最后几行:

//Collection
var TodoList = Backbone.Collection.extend({
  model: Todo
});

var todos = new TodoList();

var todoview = new TodoView({model: todos});

从那时起,您可以修改TODO(这是一个
集合),您的视图可以侦听TODO的事件并相应地重新渲染。

您没有说,但我假设您得到的错误发生在render()方法中

您的问题是您定义了一种新类型的模型(
var-Todo=Backbone.model.extend({…
),但是您从未实例化它,也没有将模型传递给todoview构造函数

因此,至少你需要做:

var todomodel = new Todo();

var todoview = new TodoView({
    model: todomodel
});

另一个问题的答案就是您问题的答案:实例化视图时,您没有将模型传递给视图

var model = new Todo();
var todoview = new TodoView({model: model});
将对象传递给视图的构造函数时,它会查找某些键并将它们直接附加到视图

您可以通过查看和搜索
viewOptions
来查看


这就是如何将
this.model
this.collection
自动附加到视图的
this

“另一个问题的答案就是您的问题的答案”?那你为什么发帖呢?为了增加上下文:这个问题还问了
这个.model
这个.collection
。只是想帮点忙。我可能错了,但我认为你想把
TODO
作为
集合
传递到视图中,而不是
模型
,这样你就可以在视图中作为引用它e> 此.集合
var model = new Todo();
var todoview = new TodoView({model: model});