在Dojo中,使用this.own更安全,还是附加事件安全吗?

时间:2015-05-21 16:35:45

标签: javascript dojo

我可以选择将事件附加到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));

2 个答案:

答案 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