3

在 Backbone 集合上调用 collection.fetch({ add: true }) 之后,我想在更新集合的视图完成渲染后触发一个事件。

集合视图”有一个“添加”方法,它为集合中的每个新项目生成一个“项目视图”,在该视图上调用“渲染”,并将其添加到集合视图中。

有没有办法在获取集合完成时触发事件,并且所有项目都已添加和呈现?

4

2 回答 2

5

fetch集合上的方法需要一个success参数:

拿来 collection.fetch([options])

[...]选项哈希接受successerror回调,它们将分别作为参数传递(集合、响应、选项)和(集合、xhr、选项)。

success回调将在集合更新后被调用,因此它将所有"add"事件被触发和处理后被调用。所以你可以这样做:

collection.fetch({
    success: function(collection, response, options) {
        collection.trigger('fetched_and_notified');
    }
});

任何关心的人都可以collection.on('fetched_and_notified', ...)收听这样的事件。如果您愿意,您可以提供自己的fetch实现来自动触发此事件,如下所示:

fetch: function(options) {
    options = options ? _.clone(options) : { };

    var success     = options.success;
    options.success = function(collection, response, options) {
        collection.trigger('fetched_and_notified', collection);
        if(success)
            success(collection, response, options);
    };
    Backbone.Collection.prototype.fetch.call(this, options);
}
于 2012-11-28T21:32:42.083 回答
1

您可以使用Backbone.Events根据您的应用程序在各种对象上触发自定义事件

要在渲染视图后触发事件,请执行以下操作:

var MyView = Backbone.View.extend({

  initialize: function() {
     _.bindAll(this);
  },  

  render: function() {
     //Do all the rendering

     this.trigger('myEvent');
  }
});

this.trigger('myEvent' ) 是行之有效的。

于 2012-11-28T14:12:29.023 回答