0

我有一个代表用户输入的 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

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

谢谢。

4

2 回答 2

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);
    }
  }
于 2013-06-04T07:23:30.390 回答
1

是的,这是设计使然。

如果你想在有变化时更新 UI,你可以只听"change"事件,而不是"all".

于 2013-06-04T07:27:18.017 回答