在Aurelia中,通过trigger
或delegate
完成与方法的结合事件。在文档中有相当好的解释: http://aurelia.io/hub.html#/doc/article/aurelia/binding/latest/binding-delegate-vs-trigger/1Aurelia - 自定义事件:触发还是委托?
但是,文档没有提及CustomEvent
。 CustomEvent
的准则是什么?
在Aurelia中,通过trigger
或delegate
完成与方法的结合事件。在文档中有相当好的解释: http://aurelia.io/hub.html#/doc/article/aurelia/binding/latest/binding-delegate-vs-trigger/1Aurelia - 自定义事件:触发还是委托?
但是,文档没有提及CustomEvent
。 CustomEvent
的准则是什么?
这有点复杂,因为CustomEvent
是相当可定制的,可以在任何时间发送。
Aurelia docs说delegate
是首选。但是,delegate
的执行依赖于<body>
元素的全局事件处理程序,因此不能始终使用。调度一个事件的元素,然后该事件冒泡到<body>
,到达DOM中所有可见的根。因此,为了使delegate
工作:
CustomEvent
dispatchEvent
被称为上)上启用要附加到DOM树。因此事件实际上在鼓泡时达到<body>
。1点只是设置的事情,让我们看看2.这取决于如果该事件被后视图模型被附加到DOM(前attached()
回调)或之前分派。如果在之前,那么delegate
将不起作用,请使用trigger
。否则使用delegate
。
偏偏之前附着到DOM→使用trigger
:
canActivate()
,activate()
bind()
,改变的回调bindables,xxxChanged()
Happens cert只需附加→使用delegate
:基本上内置的基于用户的DOM事件(点击,选择,更改等)。原因:因为用户只能与我们的视图模型进行交互,如果它已经在DOM中。
对不起,我不能发表评论,balazska的答案很好,但它假设你清楚地了解事件中的每件事情是如何工作的。如果你听自定义事件对这样的事情
:
<div repeat.for='items of my_1000_items_collection' custom-event.trigger='doIt()'></div>
您注册1000项听者为了简化他的版本。在这种情况下,如果需要更好地使用委托并调整代码,它可能会提高应用程序的性能。
您也可以使用capture
,这是目前没有记录。(它的方式来释放)这才是真正的Capture Event
<div repeat.for='items of my_1000_items_collection' custom-event.capture='doIt()'></div>
,但如果'被发送定制event'“早”(构造函数,绑定,激活等),then'trigger'是唯一的出路捕捉该事件。 – balazska
我还没有遇到组件设置阶段需要事件的情况,但这将是有用的方法。 – bigopon
我刚刚做到了,这就是为什么我首先想到了这个问题。说到结核:在绑定数据被转换之后,'bindized()'方法发送'initialized'事件。 – balazska