骨干听不通

时间:2013-05-21 04:43:17

标签: events backbone.js backbone-events

我有以下工作代码,我打算用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;
},

2 个答案:

答案 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

的例子,请保持这个问题。