我有一个表示用户输入的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
这是预期和处理的东西,还是需要修复的听力方法?我想避免单独键入所有事件名称,因为这意味着代码维护过多。
感谢。
答案 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"
。