【问题标题】:Backbone.js sync event in collection集合中的 Backbone.js 同步事件
【发布时间】:2012-05-25 15:08:19
【问题描述】:

根据此处的文档:http://documentcloud.github.com/backbone/#FAQ-events 当我执行某些操作以将集合与服务器同步时,集合已触发同步事件。我尝试在集合上调用 fetch 方法并等待其上的同步事件,但它从未发生过。添加事件被触发,但在同步集合中的所有项目后我只需要一个事件来更新相应的视图。还有其他方法可以触发此事件吗?

【问题讨论】:

    标签: javascript javascript-events backbone.js


    【解决方案1】:

    解决方案是在作为参数传递给 fetch 方法的“成功”回调中手动触发同步事件。

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

    【讨论】:

    • 从主干 0.9.9 开始,不再需要在成功回调时添加同步触发器。来自backbonejs.org/#changelog Backbone.sync 中的合并“同步”和“错误”事件。现在无论是否存在成功或错误回调都会触发它们。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • Reset 事件不适合我的需要,因为我使用 add: true 参数调用 fetch。
    猜你喜欢
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2014-08-20
    • 2012-05-10
    • 2012-10-30
    相关资源
    最近更新 更多