如果我从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
?
答案 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来改变作用域。