我们怎样才能在ember的行动中获得原始事件

Jua*_*dim 20 ember.js

我正在更新个人项目,我使用的是ember.js版本0.9.x.

所以发布了一个新版本,我遇到了与ember操作相关的问题.

我有以下HTML代码:

<li><a href="#" id="startApp" {{action activateView target="view"}}> Home</a> <span class="divider">|</span></li>
Run Code Online (Sandbox Code Playgroud)

在哪里,当我点击它的调用这个函数activateView:

activateView: function(event, context) {
   console.log(event);              
}
Run Code Online (Sandbox Code Playgroud)

但事件和背景是不确定的.我已经尝试过this.context并返回undefined.

其主要思想是在用户点击时获取链接的id.

我知道路线和车把帮助链接,但我真的需要其他东西的id,

ant*_*ore 18

在恩伯2 ...

在您的操作中,您始终可以访问event具有DOM元素的Javascript 对象,例如

actions: {
    myAction() {
        console.log(event.target) // prints the DOM node reference
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,这似乎不适用于Firefox.我得到一个错误说明:`ReferenceError:事件未定义`.示例:https://jsfiddle.net/6fra6cL4/ (6认同)

Ted*_*nny 9

事件未使用操作助手传递.如果您真的想要事件对象,则需要定义视图并使用该click事件:

App.MyLink = Em.View.extend({
  click: function(e) {
  }
});
Run Code Online (Sandbox Code Playgroud)

然后:

<li>{{view App.MyLink}}</li>
Run Code Online (Sandbox Code Playgroud)

但是需要访问dom事件是一种罕见的情况,因为你可以传递参数{{action}}.在你的情况下:

<li><a href="#" id="startApp" {{action activateView "startApp" target="view"}}> Home</a> <span class="divider">|</span></li>
Run Code Online (Sandbox Code Playgroud)

并在事件中:

activateView: function(id) {
  console.log(id);              
}
Run Code Online (Sandbox Code Playgroud)

  • 事件不仅仅是DOM元素.我理解,如果我真的需要,不要在动作中访问事件或设置我自己的自定义处理程序是更好的做法.但是还有一些后门可以进入这个活动吗?基本上没有人真正回答了OP的问题. (5认同)