dojo.declare("profile.BasicInfo", [dijit._Widget, dijit._Templated], {
somefunc: function() {
dojo.xhrPost({
url: ajaxURL,
content: adata,
load: function(data) {
alert(this);//this refers to the object sent to xhrPost
}
});
},
somevar: 17
});
我使用this
的地方是指作为参数发送到xhrPost函数的对象。这是对的。没有错误。但我想访问作为dojo.declare的第三个参数的对象。
或者我想访问somevar
。肯定this.somevar
不会工作。
我想出的一个可能的解决方案是使用对this
的重复引用,然后在xhrPost中使用它。这会有用吗?或者我是以错误的方式使用对象。或者当dojo加载程序解析文件时会出现问题吗?
somefunc: function() {
var temp = this;
dojo.xhrPost({
url: ajaxURL,
content: adata,
load: function(data) {
alert(temp);//will temp refer to what i want it to?
}
});
},
有更好的解决方案吗?
答案 0 :(得分:3)
dojo.hitch看起来更好
内联匿名函数是痛苦...尽量避免使用像declare(...,{foo:new Stuff({func1:function(){xhr.send({load:function(){}})})})强>
但在你的情况下, temp 引用'this'
更漂亮的是
on: function() {
xhr.send({
load: lang.hitch(this, then)
});
},
then: function(data, io) {
alert(typeof this.on == "function" + "==true");
}
答案 1 :(得分:2)
您的示例解决方案正是如何完成的。许多人使用命名变量的约定来绑定'self'。
var self = this;
答案 2 :(得分:1)
由于this question的答案中解释的原因以及因为它是Douglas Crockford convention,我更喜欢使用:
var that = this;