Backbone _.each collection.model为空

时间:2012-09-06 08:29:16

标签: collections backbone.js model

我试图简单地将我在PHP中请求的内容返回给JSON。 我的问题是每个股票尚未完成。 确实,它是"渲染"但是" this.collection.models"尚未完成,因为请求尚未完成。

我该怎么做才能解决这个问题,等到请求完成后才能正确完成循环。

提前谢谢

var Article = Backbone.Model.extend({});

var Articles = Backbone.Collection.extend({
    model:Article,
    url: function() {
        return _BASE_URL+'/sync/getLastArticles';
    },
    initialize:function () {
        this.fetch();
    }
});

var ArticlesView = Backbone.View.extend({
    template:$('#articles').html(),

    initialize:function () {
        this.collection = new Articles();
        this.render();
    },

    render:function () {
        console.log(this.collection);
        var that = this;
        _.each(this.collection.models, function (item) {
            console.log(item);
        }, this);
    },

    renderArticle:function () {
        ;
    }
});

1 个答案:

答案 0 :(得分:7)

render完成之前fetch。您要做的是等待fetch完成,然后render。现在,您如何获得fetch何时完成的通知?您有两个选择:

The success function(我不推荐)

// ArticlesView
initialize: function() {
  _.bindAll(this); // Don't forget to BIND
  this.collection = new Articles();
  this.collection.fetch({
    success: this.render
  });
}

现在,当提取成功时,将调用render。但是这会导致范围问题,Backbone.js提供了一个更好的替代回调函数: events

Event callback(更喜欢这个)

// ArticlesView
initialize: function() {
  _.bindAll(this);
  this.collection = new Articles();
  this.collection.on('reset', this.render); // bind the reset event to render
  this.collection.fetch();
}