我正在使用twitter typeahead lib,它可以发送自定义事件。一个这样的事件是“typeahead:selected”,它被记录为将3个参数传递给事件处理程序。
要在Ember中捕获该事件,我首先要这样做:
App = Ember.Application.create({
customEvents: {
"typeahead:selected": "onTypeaheadSelected"
}
})
在视图中,我这样做:
TypeaheadTextField: Ember.TextField.extend({
onTypeaheadSelected: function(a,b,c) {
console.log("onTypeaheadSelected", arguments, a, b, c);
},
})
但是只有第一个参数是由ember设置的,它是jQuery事件对象。参数“b”和“c”未定义。
如果我在我的视图中使用此代码尝试通过jQuery直接监听事件:
didInsertElement: function () {
this.$().typeahead().on('typeahead:selected', function(a,b,c) {
console.log("onTypeaheadSelected", arguments, a, b, c);
});
}
我得到的所有“a”,“b”和“c”都带有值,所以typeahead实际上是在发送它们。
这是ember 1.5.0。
答案 0 :(得分:1)
事件回调的一般实现是传回SomeCustomEvent
arg,其中包含该事件的所有参数。他们围绕这个概念编写了customEvent处理程序(可能是短视的,除非有一些文档说明它是土地的法则)。 https://developer.mozilla.org/en-US/docs/Web/Events
话虽这么说,你需要像你一样在视图层实现它。您可以创建一个mixin或基类(基本上是同一个东西),因此您不需要反复重新创建代码。
App.TypeAheadView = Em.View.extend({
setupTypeAhead: function () {
this.$().typeahead().on('typeahead:selected', this.typeAhead);
}.on('didInsertElement'),
killTypeAhead: function(){
this.$().typeahead().off('typeahead:selected', this.typeAhead);
}.on('willDestroyElement'),
typeAhead:function(a,b,c) {
console.log("onTypeaheadSelected", arguments, a, b, c);
}
});
App.BlahView = App.TypeAheadView.extend();
App.CowView = App.TypeAheadView.extend();