2

Backbone の collection.each() メソッドを使用しようとすると、次のメッセージが表示されます。

TypeError: オブジェクト関数 (){ return parent.apply(this, 引数); } にはメソッド 'each' がありません

Jeffrey Way のチュートリアルから Backbone を学んでいます。彼と同じコードを入力したのですが、なぜかうまくいきません。

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 の場合は期待どおりに機能しましたが、このエラーが表示されました。私はあなたの助けに感謝します。

4

2 に答える 2

5

を初期化する必要がありますPeopleCollection

見る:var peopleView = new PeopleView ({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()そのクラスのインスタンスと考えてください。インスタンスを操作する必要があります。

.eachを大文字にしたため、内部でもエラーが発生しますperson。への変更:

this.collection.each(function(person) {
   var personView = new PersonView({ model: person });
   this.$el.append(personView.render().el)
}, this)
于 2013-05-18T17:45:49.297 に答える