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');
我有自己的自定义视图:
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');