【问题标题】:bootstrap fires event twice when model changes - "change" and "change:model-attribute-name"当模型更改时,引导程序会触发两次事件 - “更改”和“更改:模型属性名称”
【发布时间】:2013-06-04 15:27:18
【问题描述】:

我有一个代表用户输入的 Backbone.Model。在 UI 回调中,我使用 xxx.set() 更新模型对象的属性。 Backbone.View 管理器监听更改事件如下:

// create view viewObj with a new model instance modObj
this.listenTo( this.modObj, "all", function() {
                alert("event! from FBox: " + arguments[0] + "; arg2=" + arguments[2]) });

当屏幕上的某些内容(例如下拉菜单)发生更改时,我期待一个但实际上得到了两个回调。

1. change:name-of-changed-model-attribute
2. change

这是可以预料和处理的事情,还是我的聆听方法需要修复?我想避免必须单独键入所有事件名称,因为这将意味着过多的代码维护。

谢谢。

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

    发生这种情况是因为主干在更改“更改”和“更改:[属性]”时触发了两个事件

    来自主干源代码:

     if (!silent) {
        if (changes.length) this._pending = true;
        for (var i = 0, l = changes.length; i < l; i++) {
          this.trigger('change:' + changes[i], this, current[changes[i]], options);
        }
      }
      ....
      if (!silent) {
        while (this._pending) {
          this._pending = false;
          this.trigger('change', this, options);
        }
      }
    

    【讨论】:

      【解决方案2】:

      是的,这是设计使然。

      如果您想在发生变化时更新 UI,您可以只听 "change" 事件,而不是 "all"

      【讨论】:

        猜你喜欢
        • 2013-06-11
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        • 2012-01-19
        • 2023-04-04
        • 2018-03-20
        • 1970-01-01
        相关资源
        最近更新 更多