在 ember 中获取动作目标元素 [英] get action target element in ember

查看:19
本文介绍了在 ember 中获取动作目标元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何获取触发了单击事件的目标元素的对象.例如,如果我有一个模板,如:

How can I get the target element's object on which a click event was fired. For eg, if I have a template like:

<table>
<tr>
    <th {{action "someAction"}} >Type</th>
</tr>
</table>

在我的控制器中,我定义了相应的动作,如:

and in my controller I have corresponding action defined like:

action:{
    someAction : function(){
        //get the th element object 
    }
}

好像没有传递事件对象,因为我试过了

It seems like event object is not passed, because I had tried

action:{
    someAction : function(event){
        //event is undefined!
    }
}

更新:感谢马尔西奥和杰里米.我现在有了一个可行的解决方案.我的模板看起来像:

UPDATE : Thanks Márcio and Jeremy. I've now got a working solution. My template looks like:

<thead>
        {{#view AS.MyView sortBy="value"}}Value{{/view}}
</thead>

我的观点如下:

AS.MyView = Ember.View.extend({
attributeBindings: ['sortBy'],
classNames: ['sortable'],
tagName: 'th',
click: function(evt) {
    var target = evt.target, self = this;
    this.get('controller').send('setSort',$(target).attr('sortBy'));

    $(target).parent().find('th').removeClass('desc').removeClass('asc');
    $(target).addClass(self.get('controller.sortAscending')?'asc':'desc');
}
});

推荐答案

classNameBinding 是此用例的绝佳选择.

classNameBinding is a great option for this use case.

仅供参考,如果您需要处理低级浏览器事件,您可以在View层进行.

Just for reference, if you need to deal with low level browser events, you can do that in the View layer.

http://emberjs.com/guides/views/handling-events/

{{#view App.ClickableView}}
This is a clickable area!
{{/view}}

App.ClickableView = Ember.View.extend({
  click: function(evt) {
    alert("ClickableView was clicked!");
  }
});

这篇关于在 ember 中获取动作目标元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆