Ember 自定义视图异常:没有以下的操作处理程序:searchEvent

Ember custom view exception: had no action handler for: searchEvent

我有自己的自定义视图:

export default Ember.ContainerView.extend({
  classNames: ['search-terms'],
  eventTypeValue: null,
  userSidValue: null,

  init: function() {
    this._super();

    this.eventTypeValue = Ember.TextField.create();
    this.userSidValue = Ember.TextField.create();

    this.eventTypeValue.set("placeholder", "search by event type");
    this.eventTypeValue.addObserver("value", this.userSidValue, this.change);

    this.userSidValue.set("placeholder", "earch by user sid");
    this.userSidValue.addObserver("value", this.userSidValue, this.change);

    this.pushObject(this.eventTypeValue);
    this.pushObject(this.userSidValue);
  },

  change: function() {
    this.get("controller").send("searchEvent");
  }
});

和控制器:

export default Em.Controller.extend({

  actions: {
 searchEvent : function() {
  console.log("controller searchEvent");
 }
  }
  
});

当我更改某些字段中的文本时,出现以下异常:

Uncaught Error: had no action handler for: searchEvent

但是当我输入一些文本然后单击自定义视图外的某处时,这会起作用。

您的问题是 addObserver 的第二个参数 - 这是执行第三个参数 (this.change) 的上下文。

即使您指定 this.change 它也不会使用 this - 它使用 Ember.TextField 作为 this 而不是 ContainerView

您需要更改以下两行:

this.eventTypeValue.addObserver("value", this.userSidValue, this.change);
this.userSidValue.addObserver("value", this.userSidValue, this.change);

至:

this.eventTypeValue.addObserver("value", this, this.change);
this.userSidValue.addObserver("value", this, this.change);

This is a working JSBin example

我经常看到字符串作为方法(第三个参数)传递 - 这也有效。我会传递字符串而不是实际函数本身。

this.eventTypeValue.addObserver("value", this, 'change');
this.userSidValue.addObserver("value", this, 'change');