Javascript 主干集合。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,

当我尝试使用主干的集合时,我收到以下消息。each()方法:

TypeError:Object函数(){return parent.apply(this,arguments);}没有方法“each”

我正在学习杰弗里·韦恩的一些教程;我输入了与他的相同的代码,但由于某种原因它不起作用

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);