【问题标题】:Dojo : How to access 'this' from inside a require block?Dojo:如何从 require 块中访问“this”?
【发布时间】:2013-09-17 14:49:29
【问题描述】:

如果我从 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");
    });
}

如何在 require 中访问 this

【问题讨论】:

    标签: dojo


    【解决方案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 元素。

    【讨论】:

    • 谢谢,效果很好。如果我在这样的 require 块中定义了一个函数,我是否能够从 require 块外部访问它 - 比如在另一个 javascript 文件中?
    【解决方案2】:
     require (["dojo/dom-class"], dojo.hitch(this,function (domClass) {
            console.log (this.id); // undefined
            domClass.add (this, "clicked");
        }));
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-26
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      相关资源
      最近更新 更多