2

我真的有一个两部分的问题。

控制台告诉我:“TypeError:this.collection.each 不是函数”

在短期内,我很想知道为什么我的代码不起作用。

从长远来看,我更感兴趣的是知道为什么它没有告诉我“每个”不是一个函数,因为那是我试图调用的方法。

PS 我已经确认 JQuery 正在正确加载,并且在此代码加载之前,所以这不是问题。

相关的javascript是:

$(function(){

var items = [
        { name: 'Abe Lincoln', details: 'Is he that guy from that new reality show?'},
        { name: 'Captain Planet', details: 'He is our hero'},
        { name: 'Karthus', details: 'Press R'},
        { name: 'Your Mom', details: 'She misses me'},
        { name: 'Teddy Roosevelt', details: 'Makes the most interesting man in the world look boring'}
    ];

    var itemsCollectionView = new ListView({collection: items});
    Backbone.history.start();
});

var ListView = Backbone.View.extend({

    el: '#the-list',

    initialize: function(){
        this.render();
    },

    render: function(){
            this.collection.each(function(model){
            this.addOne(model);
        }, this);
    },

    //create an itemview for a model, and add it to the list view
    addOne:function(model){
        var itemView = new ItemView({model: model});
        this.$el.append(itemView.render().el);
    }
});
4

1 回答 1

5

this.collection.each与 Backbone 一起使用很好,问题是您没有将实际的 Backbone 集合传递给 ItemView 的实例,而只是一个数组。您将需要以下内容:

var itemsCollection = new ItemsCollection(items), // substitute your collection variable
    itemsCollectionView = new ListView({ collection: itemsCollection });

Also, I tried running your code on Backbone 1.0.0 and jQuery 1.10.1 and I get

   TypeError: Object [object Array] has no method 'each'
于 2013-08-25T04:25:41.017 回答