Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Dojo中,使用this.own更安全,还是附加事件安全?_Javascript_Dojo - Fatal编程技术网

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

Javascript 在Dojo中,使用this.own更安全,还是附加事件安全?,javascript,dojo,Javascript,Dojo,我可以选择将事件附加到dijit的两种方式。我可以使用data dojo attach event附加事件: <div data-dojo-attach-event="onclick: _onClick"></div> 关于清理事件处理程序,哪个更安全?我知道this.own会在dijit被销毁时清理句柄,但是会在dijit被销毁时附加事件清理句柄吗 var aButton = new Button({ label: 'Click Me', onClic

我可以选择将事件附加到dijit的两种方式。我可以使用data dojo attach event附加事件:

<div data-dojo-attach-event="onclick: _onClick"></div>
关于清理事件处理程序,哪个更安全?我知道this.own会在dijit被销毁时清理句柄,但是会在dijit被销毁时附加事件清理句柄吗

var aButton = new Button({
    label: 'Click Me',
    onClick: function () {
        console.log('i am a handler, too!');
    }
}, domConstruct.create('div', {} this.domNode));
编辑:忘记添加此案例。当父dijit被销毁时,这个处理程序会被清理吗

var aButton = new Button({
    label: 'Click Me',
    onClick: function () {
        console.log('i am a handler, too!');
    }
}, domConstruct.create('div', {} this.domNode));

从源代码的外观来看,由
数据dojo attach事件
附加的处理程序被添加到一个
\u attachEvents
数组中,该数组被迭代,并在
destroyRendering
阶段调用remove。所以,两者都应该是安全的。

同意两者都是安全的。。。但我会选择使用

on(this.someNode, 'click', '_onClick') 
如果您需要更改此的范围。我发现很多次,特别是对于按钮,我希望调用dijit中的其他函数,而不是只访问按钮。在这种情况下,你可以这样做

on(this.someNode, 'click', lang.hitch(this, this._onClick));
大多数情况下,从事件对象获取所需的内容。更多信息请点击此处:


谢谢你,凯尔。为了简洁,我省略了lang.hitch。但是,它是如此普遍,以至于我想不出有一天我没有使用它。还值得注意的是,data dojo也会将事件作用域附加到它。Kyle,FYI,lang.hitch将字符串作为第二个参数,并在第一个参数中查找对象上具有相同名称的方法,因此您可以编写调用:on(this.someNode,'click',lang.hitch(this,“_onClick”);不要忘记对数据dojo附加事件使用“单击”而不是“onclick”(将不起作用)。