Как получить доступ к глобальной переменной в объекте обратного вызова в JavaScript YUI без использования window.myvariable? - PullRequest
0 голосов
/ 01 мая 2010

У меня есть это:

var MyObject = function(){   
   this.url = "monurl";   
   this.mavar = "";   
   this.Load = function(){
     var callback = {
       success: function(o){
         mavar = o.responseXML.getElementsByTagName("montag")[0].firstChild.nodeValue;
       }
     }
     YAHOO.util.Connect.asyncRequest('GET',url,callback);
} }

переменная mavar недоступна. Как я могу это сделать?

Ответы [ 5 ]

1 голос
/ 02 мая 2010

Я полагаю, что вы можете установить параметр видимости для обратного вызова. Так что вы должны быть в состоянии сделать что-то вроде следующего.

var MyObject = function(){   
   this.url = "monurl";   
   this.mavar = "";   
   this.Load = function(){
     var callback = {
       success: function(o){
         this.mavar = o.responseXML.getElementsByTagName("montag")[0].firstChild.nodeValue;
       },
       scope: this
     }
     YAHOO.util.Connect.asyncRequest('GET', this.url, callback);
} }
0 голосов
/ 01 мая 2010

Лучший способ справиться с этим - позволить YUI выполнить коррекцию области видимости, поскольку встроенная поддержка есть. На этой странице документации рассказывается, как это сделать. http://developer.yahoo.com/yui/connection/#scope

var MyObject = function() {
    this.url = "monurl";
    this.mavar = "";
    this.Load = function() {
        var callback = {
            success: function(o){
                this.mavar = o.responseXML.getElementsByTagName("montag")[0].firstChild.nodeValue;
            },
            scope: this
        }

        YAHOO.util.Connect.asyncRequest('GET', url, callback);
    }
}
0 голосов
/ 01 мая 2010

Вы также можете сделать это так:

var MyObject = new function(){   
   this.url = "monurl";   
   this.mavar = "";   
   this.Load = 
   (function(that){ 
        return function(){
            var callback = {
                success: function(o){
                    that.mavar = o.responseXML.getElementsByTagName("montag")[0].firstChild.nodeValue;
                }
            }
            YAHOO.util.Connect.asyncRequest('GET',url,callback);
        } 
    })(this);
};
0 голосов
/ 01 мая 2010

В моем объекте я добавляю переменную, которая ссылается на следующее:

var selfMyObject = this;

и я заменяю this.mavar на selfMyObject.mavar в случае успешного обратного вызова, и он работает нормально.

0 голосов
/ 01 мая 2010

Сохранить переменную this:

var MyObject = function() {   
   this.url = "monurl";   
   this.mavar = "";   
   this.Load = function() {
     var me = this;
     var callback = {
       success: function(o) {
         me.mavar = o.responseXML.getElementsByTagName("montag")[0].firstChild.nodeValue;
       }
     }
     YAHOO.util.Connect.asyncRequest('GET',url,callback);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...