需要参考的是dojo小部件

时间:2011-06-24 01:05:13

标签: javascript dojo scope this

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?
      }
  });
},

有更好的解决方案吗?

3 个答案:

答案 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;