2011-06-24 50 views
0
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不会工作。需要参考这是dojo小部件

我想出的一个可能的解决方案是对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? 
     } 
    }); 
}, 

有没有更好的解决方案?

回答

1

至于原因,在回答解释this question因为它是一个道格拉斯克罗克福德convention,我更喜欢使用:

var that = this; 
2

您的示例解决方案就是如何完成的。许多人使用将变量命名为'self'的约定。

var self = this; 
+2

你也可以使用'dojo.hitch()'改变'this'范围。但我更喜欢'var self = this'这行。这是更少的代码,更清楚。 –

+1

啊,我忘了那个。就我个人而言,我从不使用顺风顺水,因为我认为它会让有限的道场经验的人感到困惑。 – limscoder

3

dojo.hitch会更好看

联匿名函数(...){foo:new Stuff({func1:function(){xhr.send({load:function(){}})})});

但在你的情况下,临时确实引用 '这个'

越漂亮将

on: function() { 
    xhr.send({ 
    load: lang.hitch(this, then) 
    }); 
}, 
then: function(data, io) { 
    alert(typeof this.on == "function" + "==true"); 
} 
+0

它不仅看起来更好,而且当'this''always_意味着'this'时,它不太容易出错。 – danorton