【问题标题】:Backbone.js calling render after collection is populated填充集合后 Backbone.js 调用渲染
【发布时间】:2012-07-20 18:39:51
【问题描述】:

我正在尝试在获取集合后调用渲染。

在我的初始化方法中,我有:

this.collection.bind('all', this.render, this);
this.collection.fetch();

在 IE 中,它似乎有时会在集合有数据之前尝试呈现。集合似乎没有可以绑定的“更改”事件,有没有更好的方法来确保在渲染之前已经提取了集合?

谢谢!

编辑:

如果我刷新页面,它似乎总是可以工作,但是如果我再次单击地址栏并加载页面,它就不会工作。

【问题讨论】:

  • 重置事件是你要找的吗?
  • 嗯,看起来不像,所以我从一个空集合开始,然后使用 fetch() 填充它。之后,我想调用渲染
  • 在上面添加了一条额外的评论,只有当你直接从地址栏进入时,它才会被隔离,如果我刷新页面 - 它可以工作。
  • 你可以试试 'view.listenTo(collection, 'sync', view.render);'从视图内部而不是上面的绑定方法。您可能想用“this”替换视图

标签: javascript backbone.js


【解决方案1】:

如果你想保证在渲染之前已经获取了数据,那么我建议使用 jQuery 的 deferred 对象:

this.collection.deferred = this.collection.fetch();
self = this;
this.collection.deferred.done(function() {
    self.collection.render();
  }
);

基本上,您发送到done 的函数中的任何内容都只会在 fetch 完成之后调用。

关于延期的更多信息:

【讨论】:

    【解决方案2】:

    看着 Backbone 的 Catalog of Events 听起来你想听 reset 事件

    【讨论】:

      【解决方案3】:

      以下应该有效:

      this.collection.on('reset', this.render);
      this.collection.fetch();
      

      通常在 Backbone.js 中,我们会使用 on() 将回调绑定到对象。

      【讨论】:

        【解决方案4】:

        以下内容绝对可以,它对我有用...

        而不是下面的

        this.collection.fetch();
        

        使用这个

        this.collection.fetch(async: false);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-19
          • 2011-11-07
          • 1970-01-01
          • 1970-01-01
          • 2016-06-09
          • 2016-05-19
          • 2013-07-10
          • 2014-06-13
          相关资源
          最近更新 更多