模型更改时,bootstrap触发事件两次 - “更改”和“更改:模型属性名称”

时间:2013-06-04 07:14:30

标签: backbone.js

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

这是预期和处理的东西,还是需要修复的听力方法?我想避免单独键入所有事件名称,因为这意味着代码维护过多。

感谢。

2 个答案:

答案 0 :(得分: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);
    }
  }

答案 1 :(得分:1)

是的,这是设计的。

如果您想在更改内容时更新用户界面,则可以只收听"change"个活动,而不是"all"