2

我有以下工作代码,我打算用 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 方法不会在第二个版本中被调用。

奇怪的是我相应地更新了我的应用程序的其余部分,没有任何麻烦。

我敢肯定,我一定缺少一些很愚蠢的东西。

顺便说一句,这是该字段用来引发事件的代码

[...]
  this.trigger('validate', this.errors);

  this.error = !this.isValid();
  return this.errors;
},
4

2 回答 2

4

我还没有使用新的 listenTo 和 stopListening,但我可以看到在你的新版本中,你正在调用 stopListening 对参数 field,这意味着你的视图仍在监听以前可见的this.field

setField: function(field) {
    if (this.field) this.stopListening(field);

您现有的版本调用off.this.field

尝试使用:

if (this.field) this.stopListening(this.field);

于 2013-05-21T05:25:32.120 回答
2

我终于找到了问题的原因

我正在使用 setField 方法破坏视图(当使用 listenTo 而不是 object.on 时,该方法释放了附加到它的所有事件)。

这是我自己的代码的一个错误,所以 listenTo 工作正常

如果有人想找到如何从observee.on迁移到observer.listenTo的示例,请保留此问题

于 2013-05-25T19:45:51.040 回答