Dojo:如何从require块中访问'this'?

时间:2013-09-17 14:49:29

标签: dojo

如果我从onclick事件调用函数,我通常会使用this来访问触发事件的元素。但是如果我正在使用dojo require,那么this将无法在require中访问。

HTML:

<button id = "someButton"> Click Me </button>

使用Javascript:

require (["dojo/on", "dojo/dom"], function (on, dom) {
    var button = dom.byId ("someButton");
    on (button, "click", doSomething);
});

function doSomething () {
    console.log (this.id); // someButton

    require (["dojo/dom-class"], function (domClass) {
        console.log (this.id); // undefined
        domClass.add (this, "clicked");
    });
}

我如何在require中访问this

2 个答案:

答案 0 :(得分:1)

您的问题有几种解决方法。最常见的解决方案是仅对脚本块使用单个需求,并在require callback中包含所有定义

require(['dojo/on','dojo/dom','dojo/dom-class'],function(on,dom,domClass){
    var button = dom.byId ("someButton");
    on (button, "click", doSomething);
    function doSomething (event) {
        console.log (this.id); // someButton
        console.log (this.id);
        domClass.add (this, "clicked");
    });
});

要考虑的另一件事是dojo / on模块将标准化的事件对象传递给事件处理程序。因此,在这种情况下,doSomething()将传递一个event对象,您可以从中获取实际点击的dom元素。

答案 1 :(得分:0)

 require (["dojo/dom-class"], dojo.hitch(this,function (domClass) {
        console.log (this.id); // undefined
        domClass.add (this, "clicked");
    }));

require中的函数是一个回调函数,因此当它返回时它的作用域是窗口,你可以使用bind或dojo.hitch来改变作用域。