Javascript 主干集合。each()不工作
当我尝试使用主干的集合时,我收到以下消息。each()方法: TypeError:Object函数(){return parent.apply(this,arguments);}没有方法“each” 我正在学习杰弗里·韦恩的一些教程;我输入了与他的相同的代码,但由于某种原因它不起作用Javascript 主干集合。each()不工作,javascript,backbone.js,Javascript,Backbone.js,当我尝试使用主干的集合时,我收到以下消息。each()方法: TypeError:Object函数(){return parent.apply(this,arguments);}没有方法“each” 我正在学习杰弗里·韦恩的一些教程;我输入了与他的相同的代码,但由于某种原因它不起作用 var Person = Backbone.Model.extend({ defaults: { name: 'besim dauti', age: 15,
var Person = Backbone.Model.extend({
defaults: {
name: 'besim dauti',
age: 15,
occupation: 'web developer'
}
});
var PeopleView = Backbone.View.extend({
tagName: 'ul',
render: function(){
this.collection.each(function(person) {
var personView = new PersonView({ model: person });
this.$el.append(personView.render().el)
}, this)
return this;
}
});
var PersonView = Backbone.View.extend({
tagName: 'li',
template: _.template( $('#personTemplate').html() ),
render: function(){
this.$el.html(this.template(this.model.toJSON()) );
return this;
}
});
var PeopleCollection = Backbone.Collection.extend({
model: Person
});
var peopleCollection = new PeopleCollection([
{
name: 'besim',
age: 25,
occupation: 'web developer'
},
{
name: 'gaurav',
age: 25,
occupation: 'web designer'
},
{
name: 'jeffry',
age: 27
}
])
var peopleView = new PeopleView ({collection: PeopleCollection});
$(document.body).append(peopleView.render().el);
为什么
.each()
函数会出现此问题?我输入了相同的代码,对Jeffrey来说,它工作正常,但对我来说,它显示了这个错误。非常感谢您的帮助。您需要初始化人物收藏
请参阅:var peopleView=newpeopleview({collection:PeopleCollection})代码>
您正在传入原始构造函数,而不是它的实例
您应该这样做:
var peopleCollection = new PeopleCollection(); // Create an instance of PeopleCollection
var peopleView = new PeopleView ({collection: peopleCollection}); // Pass it to peopleView
如果您熟悉OOP(面向对象编程),请将PeopleCollection
视为一个类,并将var PeopleCollection=new PeopleCollection()
视为该类的一个实例。您必须使用实例
您还将在中遇到一个错误。每个都是因为您将person
大写。改为:
this.collection.each(function(person) {
var personView = new PersonView({ model: person });
this.$el.append(personView.render().el)
}, this)
您的代码在JSFIDLE中运行良好
看起来您可能有依赖性问题。你能在页面上发布你是如何包含脚本的吗?是的,我将p改为p,但不再工作。代码和jeff代码一样我不知道为什么会有相同的消息。谢谢您的回答。@user2397353您能console.log(this.collection.models)吗
在您的this.collection.each
之前,并告诉我它说了什么。@user2397353您是否确实更改了var peopleView=new peopleView({collection:PeopleCollection})代码>到var peopleView=newpeopleview({collection:peopleCollection})代码>因为在您编辑的答案中,它仍然是相同的,并且会导致您所说的确切错误。非常感谢。这就是我把peopleCollection错当成peopleCollection而不是peopleCollection的原因。@GeorgeReith每个方法都下划线吗??如果是,那么符号在哪里。请让我知道。谢谢这里是我的index.html()-可能是我在本地主机上工作时遇到的问题。我看不到链接,但我相当确定您的问题。当我删除下划线时,JSFIDLE中也会出现同样的错误。仔细检查您是否在主干之前包含下划线,并且您没有得到404。将脚本移动到页面底部。更改顺序,使其为jquery、下划线、主干、main。是的,下划线在主干之前,即使我不知道问题出在哪里,在本地主机中工作可能有问题,也可能没有。您的代码将在本地工作。您只是缺少了库。当您在PeopleView的render开始处添加新行时会发生什么,比如console.log(this.collection)代码>?一般的问题似乎是this.collection
不是您所认为的那样(因为如果是这样,它会有一个each
方法)。因此,如果您查看控制台中的实际情况(使用Firebug、Chrome开发工具等),它可能会帮助您找出问题所在。
var peopleView = new PeopleView ({collection: peopleCollection});
$(document.body).append(peopleView.render().el);