Aurelia - 自定义事件:触发器还是委托?

时间:2016-12-14 10:12:19

标签: javascript aurelia aurelia-binding dom-events

在Aurelia中,通过triggerdelegate将事件绑定到方法。在使用哪个文档的文档中有一个很好的解释: http://aurelia.io/hub.html#/doc/article/aurelia/binding/latest/binding-delegate-vs-trigger/1

但是,文档没有提及CustomEventCustomEvent

的指导原则是什么?

2 个答案:

答案 0 :(得分:3)

这有点复杂,因为CustomEvent可以自定义,可以在任何时间发送。

Aurelia docs说delegate是首选。但是,delegate的实现依赖于<body>元素的全局事件处理程序,因此不能始终使用。一个元素将事件调度到DOM中所有可见的根,然后将事件冒泡到<body>。所以为了让delegate工作:

  1. 必须在CustomEvent
  2. 上启用冒泡
  3. 发件人元素(正在调用dispatchEvent)应该附加到DOM树。这样事件在冒泡时实际到达<body>
  4. 第1点只是一个设置问题,所以让我们看看2.这取决于是否在之前 DOM(在attached()回调之前)。如果之前,那么delegate将无效,请使用trigger。否则使用delegate

    附加到DOM之前发生→使用trigger

    • 构造
    • 路由器回调:canActivate()activate()
    • 初始bindig回调: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