Нужна ссылка на это виджет додзё - PullRequest
0 голосов
/ 24 июня 2011
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 ]

3 голосов
/ 29 апреля 2012

dojo.hitch Выглядело бы лучше

Встроенные анонимные функции - это боль ... Старайтесь избегать использования вложенности, как объявлять (.., {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");
}
2 голосов
/ 24 июня 2011

Ваш пример решения именно так и делается. Многие люди используют соглашение о присвоении переменной переменной имени «self».

var self = this;
1 голос
/ 24 июня 2011

По причинам, объясненным в ответе на этот вопрос и поскольку это соглашение Дугласа Крокфорда , я предпочитаю использовать:

var that = this;
...