1

If I'm calling a function from an onclick event, I'd usually use this to access the element that fired the event. But if I'm using a dojo require, then this is not accessible within the 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");
    });
}

How would I access this inside the require?

4

2 に答える 2

1

あなたの問題にはいくつかのアプローチがあります。最も一般的な解決策は、スクリプト ブロックに 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");
    });
});

もう 1 つの考慮事項は、dojo/on モジュールが標準化されたイベント オブジェクトをイベント ハンドラーに渡すことです。したがって、この場合、実際にクリックされた dom 要素を取得できるオブジェクトdoSomething()が渡されます。event

于 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 に答える