Backbone.js 检测何时提取主干集合(主干1.0.0)

Backbone.js 检测何时提取主干集合(主干1.0.0),backbone.js,backbone.js-collections,Backbone.js,Backbone.js Collections,在最新版本的主干(1.0.0)中有一个新行为,在该行为中,在获取集合后,重置事件在默认情况下不再触发 将集合的“update”重命名为set,以实现类似的并行性 model.set(),并与reset进行对比。它现在是默认更新 获取后的机制。如果要继续使用“重置”,请通过 {reset:true} 问题是,我希望在最终获取集合时捕获事件(事实上,这种情况非常常见!) 我可以监听add、remove和change事件,但如果集合为空,我就不知道如何捕捉该事件 那么,当收集请求完成时,新的、推荐的

在最新版本的主干(1.0.0)中有一个新行为,在该行为中,在获取集合后,重置事件在默认情况下不再触发

将集合的“update”重命名为set,以实现类似的并行性 model.set(),并与reset进行对比。它现在是默认更新 获取后的机制。如果要继续使用“重置”,请通过 {reset:true}

问题是,我希望在最终获取集合时捕获事件(事实上,这种情况非常常见!)

我可以监听add、remove和change事件,但如果集合为空,我就不知道如何捕捉该事件

那么,当收集请求完成时,新的、推荐的捕获方法是什么,或者它传递{reset=true}是实现它的唯一方法

附:这里是原始问题,顺便说一句

每当模型或集合开始与服务器同步时 发出“请求”事件。如果请求成功完成 您将得到一个“同步”事件,如果没有,则会得到一个“错误”事件

比如说,

var C = Backbone.Collection.extend({
    url: '/echo/json/'
});

var c = new C();
c.on('sync', function() {
    console.log('sync');
});
c.fetch();

还有一个演示

当我们调用集合上的
fetch
时,我们可以将一个方法作为成功处理程序传递,正如您所说,当所有[添加、删除、更新或重置]都发生时,您只想做些什么,您可以在这个成功处理程序中执行

collection.fetch({
  success: function() {
    // Do Something
    // This is called when all add, remove and update operations have been done
  }
});
注意:无论您是否通过了
reset:true
,都将始终执行成功处理程序。无论您的集合是否为空,都将在发生所有添加、删除和更新事件时在最后一步调用成功处理程序


如果它不能解决您的问题,请告诉我。

我自己的解决方案确实非常简单。我已经有了一个带有附加功能的BaseCollection,因此在那里我只是将其设置为默认值{reset:true}。代码应该是这样的(我自己的BaseCollection有很多与此无关的内容):

使用承诺

// you could use promises as well
// P.S.: pardon jquery promises :)

var C = Backbone.Collection.extend({
    url: '/echo/json/'
});

var c = new C();

// c.fetch() returns jqXHR object that you can listen too
$.when( c.fetch() )
   .done(successFn)
   .fail(failFn)
   .always(alwaysFn);
// you could use promises as well
// P.S.: pardon jquery promises :)

var C = Backbone.Collection.extend({
    url: '/echo/json/'
});

var c = new C();

// c.fetch() returns jqXHR object that you can listen too
$.when( c.fetch() )
   .done(successFn)
   .fail(failFn)
   .always(alwaysFn);