我可以选择将事件附加到dijit的两种方法。我可以使用data-dojo-attach-event附加事件:
<div data-dojo-attach-event="onclick: _onClick"></div>
或者,我可以使用this.own附加一个事件:
this.own(
on(this.someNode, 'click', '_onClick')
)
关于清理事件处理程序,哪个更安全?我知道this.own将在dijit被销毁时清理句柄,但是当dijit被销毁时会附加事件清理句柄吗?
编辑:忘记添加此案例。当父dijit被销毁时,是否会清理此处理程序?
var aButton = new Button({
label: 'Click Me',
onClick: function () {
console.log('i am a handler, too!');
}
}, domConstruct.create('div', {} this.domNode));
答案 0 :(得分:2)
从源代码的外观来看,data-dojo-attach-event
附加的处理程序被添加到迭代的_attachEvents
数组中,并在destroyRendering
阶段调用remove。所以,要么安全呢。
答案 1 :(得分:2)
同意两者都是安全的......但我会选择使用
on(this.someNode, 'click', '_onClick')
如果您需要更改此范围。我发现很多次,特别是按钮,我想在我的dijit中调用其他功能,而不是只能访问按钮。在这种情况下,你可以做
on(this.someNode, 'click', lang.hitch(this, this._onClick));
并且大部分时间从事件对象中获取所需内容。更多信息:
http://dojotoolkit.org/reference-guide/1.10/dojo/_base/lang.html#hitch