Backbone.js集合中的同步事件

时间:2012-05-25 15:08:19

标签: javascript javascript-events backbone.js

根据这里的doc:http://documentcloud.github.com/backbone/#FAQ-events集合在执行与服务器同步集合的操作时触发了同步事件。我尝试在集合上调用fetch方法并在其上等待同步事件,但它永远不会发生。触发添加事件,但在同步集合中的所有项目后,我只需要一个事件来更新相应的视图。还有另一种方法可以解雇这个事件吗?

2 个答案:

答案 0 :(得分:5)

解决方案是在作为param传递给fetch方法的'success'回调函数中激活同步事件。

this.collection.fetch({add: true, success: function(collection, response){
            collection.trigger('sync');
}});

答案 1 :(得分:2)

我认为只有在更改模型时才会触发“同步”事件。因此,如果您创建,更新或删除模型,则会触发“同步”事件。

在您的情况下,我认为您想要收听集合上的“重置”事件。

编辑: 如果您正在设置{add:true}选项,那么在添加所有模型后,将不会触发单个Backbone事件。您有几个选择:

  1. 只需听取add事件并期望重复调用
  2. 使用已使用_.debounce()函数去抖动的处理程序模拟单个事件。
  3. fetch()的返回值是一个jQuery XMLHttpRequest对象。它实现了jQuery Deferred接口。所以你可以听听那个结局。例如:

    myCollection.fetch({add:true}).done(function(){
        myView.render(); //or whatever
    });