Javascript 使用此关键字dojo模块事件处理程序
我有一个dojo模块,我想使用这个关键字,但有一些问题Javascript 使用此关键字dojo模块事件处理程序,javascript,dojo,Javascript,Dojo,我有一个dojo模块,我想使用这个关键字,但有一些问题 require(["dojo/_base/declare", "dojo/_base/lang","dojo/query", "dojo/on", "dojo/dom", "dojo/NodeList-traverse"], function(declare, lang, query, on, dom, nls) { var mainWidget = declare(nu
require(["dojo/_base/declare", "dojo/_base/lang","dojo/query", "dojo/on",
"dojo/dom", "dojo/NodeList-traverse"],
function(declare, lang, query, on, dom, nls) {
var mainWidget = declare(null,{
constructor:function(){
this.onItemClicked = lang.hitch(this, this.onItemClicked);
on(dom.byId("myList"), ".toggle:click", this.onItemClicked);
},
onItemClicked: function (event) {
dom.byId("result").innerHTML = this._calculate();
dom.byId("result").innerHTML = query(this).parent('li');
},
_calculate:function(){
return 10 * 10;
}
});
var wg = new mainWidget();
});
我想在事件处理程序中使用这个关键字。我想访问一个名为“计算”的方法,该方法来自事件处理程序方法。我想访问查询(this)对象
此._calculate()正在工作,但查询(this)应返回元素,但不返回
这是您需要以某种方式捕获所需上下文的链接。高阶函数是实现这一点的好方法:
dojo.connect(window, "onload", function(){
require(["dojo/_base/declare",
"dojo/_base/lang",
"dojo/query",
"dojo/on",
"dojo/dom",
"dojo/NodeList-traverse"],
function(declare, lang, query, on, dom, nls) {
var createBtnClicked = function(context){
return function(){
dom.byId("result").innerHTML = context._calculate();
dom.byId("result").innerHTML = query(this).parent('li');
};
}
var mainWidget = declare(null,{
constructor: function(){
//this.onBtnClicked = lang.hitch(this, this.onBtnClicked);
on(dom.byId("myList"), ".toggle:click, .toggle:keyup", createBtnClicked(this));
},
_calculate:function(){
return 10 * 10;
}
});
var wg = new mainWidget();
});
在这里检查它因此如果我理解得很好,
这个
上下文应该是小部件(对于\u calculate()
函数)和被单击的DOM节点(对于query()
函数)
这真是一个很大的坏习惯。您希望使用单个上下文引用两个对象,这不仅听起来很糟糕,而且会使代码不可读
只需使用事件处理程序的target
属性检索单击的元素,如下所示:
dom.byId("result").innerHTML += query(event.target).parent('li');
但不要忘记,您正在重写#结果
HTML,因为您正在使用:
dom.byId("result").innerHTML = ...;
如果要将其添加到计算值旁边(100
),请使用+=
运算符
Small note:通过组合两个对象,您可以对小部件和目标元素使用
this
上下文,但正如我所说的,这不是一个好主意