在 Dojo 中,使用 this.own 更安全还是附加事件也安全?
In Dojo, is it safer to use this.own, or is attach-event safe, too?
我可以选择两种将事件附加到 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));
从源代码的外观来看,data-dojo-attach-event
附加的处理程序被添加到 _attachEvents
数组,该数组被迭代并在 destroyRendering
阶段调用删除。所以,两者都应该是安全的。
同意两者都是安全的...但我会选择使用
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
我可以选择两种将事件附加到 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));
从源代码的外观来看,data-dojo-attach-event
附加的处理程序被添加到 _attachEvents
数组,该数组被迭代并在 destroyRendering
阶段调用删除。所以,两者都应该是安全的。
同意两者都是安全的...但我会选择使用
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