Ember.js 既然不推荐使用Ember.View,那么如何访问顶级application.hbs模板中触发的事件的事件对象呢?
我正在升级一个为顶级Ember.js 既然不推荐使用Ember.View,那么如何访问顶级application.hbs模板中触发的事件的事件对象呢?,ember.js,Ember.js,我正在升级一个为顶级应用程序.hbs自定义Ember.View的应用程序。我有一个事件处理程序,需要访问传入的事件对象: ApplicationView = Ember.View.extend({ click(event) { // Need event here. } }); 既然Ember.View已被弃用,我不确定如何替换此逻辑 我可以在某个div中添加一个动作处理程序,它将捕获应用程序中感兴趣的事件。hbs: <div {{action "topLevelClic
应用程序.hbs
自定义Ember.View
的应用程序。我有一个事件处理程序,需要访问传入的事件对象:
ApplicationView = Ember.View.extend({
click(event) {
// Need event here.
}
});
既然Ember.View
已被弃用,我不确定如何替换此逻辑
我可以在某个div中添加一个动作处理程序,它将捕获应用程序中感兴趣的事件。hbs
:
<div {{action "topLevelClick"}}>
...
</div>
...
但是,尽管这会触发,但我无法访问事件
对象
关于如何处理这个问题有什么想法吗?默认情况下,操作处理程序接收事件侦听器的第一个参数,即浏览器传递给处理程序的事件对象。
因此,在您的操作中,可以将事件作为第一个参数。
假设在应用程序控制器中,您的操作如下:
actions: {
topLevelClick: function(event){
console.log(event);
}
}
这将在控制台上打印实际的浏览器事件
希望这有帮助。声明为DOM事件处理程序的操作会传递事件:
{{!-- application/template.hbs --}}
<div onclick={{action 'topLevelClick'}}>Click Me</div>
// application/controller.js
actions: {
topLevelClick(event) {
console.log('topLevelClick', event);
}
}
{{!--application/template.hbs-->
点击我
//application/controller.js
行动:{
topLevelClick(事件){
console.log('topLevelClick',事件);
}
}
这项工作于1.13.13日;我还没有尝试过1.13.11,尽管它通常也支持这些类型的事件处理程序。是的,我在文档中看到了这一点。但至少在我使用的版本中,1.13.11
,这不起作用。我正在寻找一条过渡路径,同时将我的应用程序升级到2.x。当我添加您描述的操作处理程序时,参数是undefined
。这是否适用于1.13.x
?我做错什么了吗?上面的解决方案是针对最新版本的。啊,我没有将其注册为DOM事件处理程序。谢谢它在1.13.11生效。