Aurelia`单击'属性,要求事件目标与元素相同

时间:2016-08-10 14:45:22

标签: aurelia aurelia-binding

我知道click.delegate以及click工作正常。但是,如果我想分配一个el.addEventListener('click', function (e) { if (e.target === el) { // continue... } else { // el wasn't clicked directly } }); 事件,只有在点击具有该属性的确切元素时才会触发该怎么办?

我可能会做这样的事情,因为它是“正常的”JS:

click.target="someMethod()"

是否已经存在这样的属性,或者我是否需要自己创建一个属性?如果是这样,我希望它与其他类似,如this。我怎么能做到这一点?

编辑:我试过这个不起作用,因为回调函数的import { inject } from 'aurelia-framework'; @inject(Element) export class ClickTargetCustomAttribute { constructor (element) { this.element = element; this.handleClick = e => { console.log('Handling click...'); if (e.target === this.element && typeof this.value === 'function') { console.log('Target and el are same and value is function :D'); this.value(e); } else { console.log('Target and el are NOT same :/'); } }; } attached () { this.element.addEventListener('click', this.handleClick); } detached () { this.element.removeEventListener('click', this.handleClick); } } 指向自定义属性类 - 而不是使用属性类的元素;

<div click-target.bind="toggleOpen">
    ....other stuff...
</div>

我正在使用它:

toggleOpen()

(在此模板的viewModel中,当从自定义属性调用时,this方法的ClickTargetCustomAttributeclick-target.bind="functionName"。)

我也希望click.target="functionName()"可以改为@Configuration @EnableAutoConfiguration @SpringBootApplication class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public SpringCamelContext camelContext(ApplicationContext applicationContext) throws Exception { SpringCamelContext camelContext = new SpringCamelContext(applicationContext); camelContext.addRoutes(routeBuilder()); return camelContext; } @Bean public RouteBuilder routeBuilder() { return new MyRouteBuilder(); } } ,就像本地的一样。

1 个答案:

答案 0 :(得分:5)

只需像click.delegate="toggleOpen($event)"一样使用smth。 $event是触发事件,因此您可以在toggleOpen

中处理它
toggleOpen(event) {
    // check event.target here
}

您还可以将模板上下文中提供的任何其他值传递给toggleOpen