this.collection上没有定义each()函数

时间:2014-10-29 08:51:07

标签: javascript jquery backbone.js underscore.js

我正在尝试向服务器发出ajax请求。我在收集时使用fetch()方法。它在监控谷歌浏览器网络选项卡后成功从服务器检索数据。

这是一个场景。

我在Model下方

var Model = Backbone.Model.extend({
    urlRoot: '/contacts',
});

collection以下

var Collection = Backbone.Collection.extend({
    model: Model,
    url: '/contacts'
});

ViewOne以下

var ViewOne = Backbone.View.extend({
    initialize: function () {
        var collection = new Collection().fetch(); // also tried with these options { wait:true, reset: true, async: false }
        new ViewTwo({ collection: collection });
    }
});

以下是ViewTwo

var ViewTwo = Backbone.View.extend({
    initialize: function () {
        this.collection.each(this.render, this); // Uncaught TypeError: undefined is not a function
    },

    render: function () {
        console.log(this.model);
    }
});

如您所见,我收到Uncaught TypeError: undefined is not a function错误。

this.render存在,所以这不是问题。问题是this.collection上的每个功能。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

只需在fetch的成功回调中创建新视图

var ViewOne = Backbone.View.extend({
    initialize: function () {
        var collection = new Collection();
        collection.fetch({
         success:function(){ 
            new ViewTwo({ collection: collection });
            }
             }); 
    }
});

答案 1 :(得分:1)

Backbone API不流畅,这意味着Collection.fetch不返回自身,它返回fetch中使用的Ajax对象。

尝试

var ViewOne = Backbone.View.extend({
    initialize: function () {
        var collection = new Collection();
        collection.fetch();

        new ViewTwo({ collection: collection });
    }
});

请注意collection.fetch是异步的,this.collectionViewTwo.initialize中可能为空。例如,请参阅Backbone.js - data not being populated in collection even though fetch is successful