collections - 主干_.each collection.model为空

标签 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 () {
        ;
    }
});

最佳答案

获取完成之前渲染。您想要做的是等待fetch完成,然后render。现在,当 fetch 完成时,您如何收到通知?您有 2 个选择:

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 提供了回调函数的更好替代方案:事件

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

关于collections - 主干_.each collection.model为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12295981/

相关文章:

javascript - Require.js 中的 Backbone.js 模式

javascript - this.model.on 更改事件未触发

java - 我应该实现 List 接口(interface)还是扩展 ArrayList 类

java - Collections.unmodified 可以应用于 Collections.EMPTY_MAP

javascript - backbone.js 事件

java - Jena OntModel SubModel(Model) API 可以传入 OntModel 吗?

java - Selenium>Webdriver>Java>单击模型窗口中的按钮时,触发另一个背景按钮

php - 如何在 Laravel 5.4 中的 firstOrCreate 中使用 where

Java 泛型和 addAll 方法

java - 有没有更快的方法从对象集合中提取唯一值?