提问者:小点点

现在Ember. View已被弃用,如何为顶级application.hbs模板中触发的事件访问事件对象?


我正在升级一个为顶级application. hbs自定义Ember.View的应用程序。在那里,我有一个事件处理程序,需要访问传入的event对象:

ApplicationView = Ember.View.extend({
  click(event) {
    // Need event here.
  }
});

现在Ember. View已被弃用,我不确定如何替换此逻辑。

我可以在某个div中添加一个操作处理程序,以捕获application. hbs中感兴趣的事件:

<div {{action "topLevelClick"}}>
   ...
</div>

但是,尽管这会触发,但我无法访问事件对象。

你觉得怎么处理这件事?


共2个答案

匿名用户

声明为DOM事件处理程序的操作会传递事件:

{{!-- application/template.hbs --}}
<div onclick={{action 'topLevelClick'}}>Click Me</div>

// application/controller.js
actions: {
  topLevelClick(event) {
    console.log('topLevelClick', event);
  }
}

这适用于Ember 1.13.13;我还没有尝试过1.13.11,尽管它通常也支持这些类型的事件处理程序。

匿名用户

默认情况下,操作处理程序接收事件侦听器的第一个参数,即浏览器传递给处理程序的事件对象。因此,在您的操作中,您可以将事件作为第一个参数。假设在您的应用程序控制器中,您的操作为:

actions: {
    topLevelClick: function(event){
        console.log(event);
    }
}

这将在控制台上打印实际的浏览器事件。

希望这有帮助。