在Aurelia中,通过trigger
或delegate
将事件绑定到方法。在使用哪个文档的文档中有一个很好的解释:
http://aurelia.io/hub.html#/doc/article/aurelia/binding/latest/binding-delegate-vs-trigger/1
但是,文档没有提及CustomEvent
。 CustomEvent
答案 0 :(得分:3)
这有点复杂,因为CustomEvent
可以自定义,可以在任何时间发送。
Aurelia docs说delegate
是首选。但是,delegate
的实现依赖于<body>
元素的全局事件处理程序,因此不能始终使用。一个元素将事件调度到DOM中所有可见的根,然后将事件冒泡到<body>
。所以为了让delegate
工作:
CustomEvent
dispatchEvent
)应该附加到DOM树。这样事件在冒泡时实际到达<body>
。第1点只是一个设置问题,所以让我们看看2.这取决于是否在之前或 DOM(在attached()
回调之前)。如果之前,那么delegate
将无效,请使用trigger
。否则使用delegate
。
在附加到DOM之前发生→使用trigger
:
canActivate()
,activate()
bind()
,更改了可绑定的回调,xxxChanged()
在附加→使用delegate
之后肯定发生:基本上是内置的基于用户的DOM事件(点击,选择,更改等)。原因:因为用户只能与我们的viewmodel交互,如果它已经在DOM中。
答案 1 :(得分:3)
对不起,我无法发表评论,balazska的答案很棒,但它假设您清楚地了解事件中的一切是如何运作的。为了简化他的版本:
如果你在这样的事情上听自定义事件:
select * from #temp
您正在注册1000个侦听器条目。在这种情况下,如果需要,最好使用委托和调整代码,这可能会提高应用程序的性能。
你也可以使用<div repeat.for='items of my_1000_items_collection' custom-event.trigger='doIt()'></div>
,目前没有记录。(在其上发布)Capture Event
capture