Aurelia`click`属性,该属性要求事件目标与元素相同
我知道Aurelia`click`属性,该属性要求事件目标与元素相同,aurelia,Aurelia,我知道click.trigger和click.delegate工作正常。但是,如果我想分配一个click事件,该事件只应在具有该属性的确切元素被单击时触发,该怎么办 如果是“正常”JS,我可能会这样做: 是否已经存在这样的属性,或者我需要自己创建一个属性?如果是这样,我希望它与其他类似,比如click.target=“someMethod()”。我怎样才能做到这一点 编辑:我尝试过这个方法,但不起作用,因为回调函数的this指向自定义属性类,而不是使用属性类的元素 import { inject
click.trigger
和click.delegate
工作正常。但是,如果我想分配一个click
事件,该事件只应在具有该属性的确切元素被单击时触发,该怎么办
如果是“正常”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>
……其他东西。。。
(在该模板的viewModel中,当从自定义属性调用时,toggleOpen()
方法的this
是ClickTargetCustomAttribute
)
我还希望如果
单击target.bind=“functionName”
可以改为单击.target=“functionName()”
,就像本地的一样。只需使用smth,就像单击.delegate=“toggleOpen($event)”
。
$event
是触发事件,所以您可以在toggleOpen中处理它
toggleOpen(event) {
// check event.target here
}
您还可以将模板上下文中可用的任何其他值传递到
toggleOpen
您可以使用click.delegate=someMethod($event)
,然后检查$event objectHmm,我尝试了这一点,但我得到的不是ClickEvent
,而是MouseEvent
。我想这并不重要,因为事件。target
仍然正确。但是,这种方法让我恼火的一点是,我需要两个单独的toggleOpen:一个是要求事件目标与单击的元素相同,另一个是行为与正常类似。我还需要一个属性被分配到的元素的引用。在我看来,它并不是很有活力。难道没有办法创建类似于单击的东西吗?target=“toggleOpen()只有在e.target===el
时才会触发toggleOpen()
?您可以使用toggleOpen()
正常情况下,在这种情况下,您会得到正常行为的空值事件。好吧,这是真的,我可以检查是否传入了事件,如果传入,则检查目标。但是是否有任何方法可以访问具有属性的元素而不使用ref
?因为如果我使用ref
开关打开
将被硬编码为该元素.iykwim您可以尝试传递ref
值,如
另一个选项是修复ClickTargetCustomAttribute
中的toggleOpen
处理程序的上下文,尝试
其中,让toggleOpenBinded=toggleOpen.bind(需要的上下文)
toggleOpen(event) {
// check event.target here
}