backbone - 如何在获取集合中的所有模型后触发视图渲染

时间:2014-03-12 20:55:29

标签: javascript backbone.js

我对集合中的模型进行了循环,以使用集合描述中的函数fetchAll进行获取。

fetchAll: function(){
    this.counter=0;
    self = this;
      for (var i=0;i<this.models.length; i++){
      this.models[i].fetch({
        success: function(){
          self.counter +=1;
          if (self.counter == self.models.length){
            alert('done');
            self.doneFetchAll = true;
          }
        }
      });

      //console.log(i);
      }

提取完成后,我看到一个警告,并且集合属性doneFetchAll设置为true ....但是如何在完成此操作后触发视图渲染?

1)骨干是否有可能听取集合中特定属性的变化,如果是肯定的,再次调用渲染?

OR

2)有没有更好的方法来获取集合中的所有模型然后重新渲染视图?

所有这些听取改变的努力都失败了(盯着视图的initialize: function()):

this.listenTo(this.collection, "change:doneFetchAll", this.render);

this.collection.on("change:doneFetchAll", this.render, this);

感谢。

2 个答案:

答案 0 :(得分:1)

尝试使用自定义事件:

fetchAll: function(){
    this.counter=0;
    self = this;
      for (var i=0;i<this.models.length; i++){
      this.models[i].fetch({
        success: function(){
          self.counter +=1;
          if (self.counter == self.models.length){
            self.trigger('fetchAll'); // here
            self.doneFetchAll = true;
          }
        }
      });

  //console.log(i);
  }

然后在initialize: function()

this.listenTo(this.collection, "fetchAll", this.render);

答案 1 :(得分:0)

你不能只听&#34;同步&#34; event而不是fetchAll?

this.listenTo(this.collection, "sync", this.render)?