【问题标题】:How to trigger an event when a Backbone model is saved?保存 Backbone 模型时如何触发事件?
【发布时间】:2012-02-11 14:37:18
【问题描述】:

如果我正确地完成了我的作业,我会了解到 Backbone 没有内置的 save 事件,该事件会在使用模型的 save 方法保存模型时触发(即使有是一个destroy事件)。

我还了解到,Backbone 有一个很好的机制,可以使用 Backbone.Events 对象创建自定义事件。使用后者是可行的,但我的印象是它的粒度不足以满足我的需求。

我的设置如下。我有一个由行(视图)组成的表(视图),每行都引用一个模型。保存模型后,我想更新/渲染该行以反映更改。

如何创建一个在保存模型时触发的 save 事件,以便更新引用该模型的表行(视图)?

换句话说,我希望能够做到以下几点:

this.model.bind('save', this.render);

【问题讨论】:

    标签: javascript events binding backbone.js


    【解决方案1】:

    从 Backbone.js 1.0.0 开始,如果模型保存成功,则会触发 sync 事件。

    this.listenTo(this.model,'sync', this.render);
    

    请注意,如果相关属性的值发生变化,则首先触发change:attribute,然后触发change 事件,然后触发sync 事件。 sync 事件被触发,无论模型是否发生变化。表示模型现在与服务器值同步。

    这些事件仅在值有效时才会触发。即models.validate 不应为从服务器获取的这些值返回任何错误。

    【讨论】:

      【解决方案2】:

      就在 3 天前,向 Backbone 发送了一个 commit,当模型成功保存时触发了一个 sync 事件。不过,该提交尚未发布,因此如果您想使用它,则需要从 github 帐户下载源代码。

      View = Backbone.View.extend({
        initialize: function() {
          _.bindAll(this, 'onModelSaved');
          this.model.bind('sync', onSuccessCallback);
        },
      
        onModelSaved: function(model, response, options) {
          //perform your after save logic
        }
      });
      

      【讨论】:

      • 我刚查了一下,这段代码现在是master主干分支的一部分。
      • 很遗憾,sync 事件在从服务端获取模型时也会触发,不适合只在从客户端推送时运行代码的需要。
      • 另一种解决方案this.model.bind('sync', this.render, this);
      猜你喜欢
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多