我有以下工作代码,我打算用object.listenTo调用替换object.on调用:
setField: function(field) {
if (this.field) this.field.off(null, null, this);
if (field) {
this.field = field;
this.field.on('validate', this.renderErrors, this);
}
return this;
},
这是新版本
setField: function(field) {
if (this.field) this.stopListening(this.field);
if (field) {
this.field = field;
this.listenTo(this.field, 'validate', this.renderErrors);
}
return this;
},
但是它有些不起作用。没有使用第二个版本调用this.renderErrors方法。
奇怪的是,我相应地更新了我的应用程序的其余部分。
我确信一定有些东西很傻我都不见了。
BTW,这是该字段用于引发事件的代码
[...]
this.trigger('validate', this.errors);
this.error = !this.isValid();
return this.errors;
},
答案 0 :(得分:3)
我还没有使用过新的listenTo和stopListening,但我可以看到,在你的新版本中,你正在对参数 field
调用stopListening,这意味着你的观点是仍在听取之前显示的this.field
setField: function(field) {
if (this.field) this.stopListening(field);
您现有的版本会在off
上致电this.field
。
尝试使用:
if (this.field) this.stopListening(this.field);
答案 1 :(得分:1)
我终于找到了问题的原因
我正在使用setField方法销毁视图(当使用listenTo而不是object.on时,它释放了附加到它的所有事件。)
这是我自己的代码上的一个错误,所以listenTo正常工作
如果有人想找一个如何从observee.on迁移到observer.listenTo
的例子,请保持这个问题。