1

如果我从 onclick 事件中调用一个函数,我通常会使用它this来访问触发该事件的元素。但是,如果我使用的是 dojo 要求,则this在要求中无法访问。

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");
    });
}

我将如何访问this需求?

4

2 回答 2

1

有几种方法可以解决您的问题。最常见的解决方案是只对脚本块使用一个 require 并在 require 回调中包含所有定义

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 元素。

于 2013-09-17T15:05:07.527 回答
0
 require (["dojo/dom-class"], dojo.hitch(this,function (domClass) {
        console.log (this.id); // undefined
        domClass.add (this, "clicked");
    }));

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

于 2013-09-17T15:05:45.150 回答