2016-03-04 2 views
1

В java вы можете ссылаться на внешний класс, указав его имя, а затем на него.Установка переменной после успешного вызова ajax

class A { 
    void A() { 

    } 
    class B { 
     void B() { 
      A.this.A(); 
     } 
    } 
} 

Теперь я пытаюсь сделать что-то подобное в javascript. Bellow У меня есть конструктор, который делает вызов ajax. Этот вызов ajax, если он успешно задает метод get и активы AssetManager.

function AssetManager(path) { 

    this.assets = {}; 

    this.get = function(tag,name) { 
     return 0; 
    }; 

    $.ajax({ 
     url: path, 
     dataType: 'json', 
     success: function(o) { 
      if (o.sprite) { 
       var keys = Object.keys(o.sprite); 
       for (var i = 0; i < keys.length; i++) { 
        var obj1 = keys[i]; 
        AssetManager.this.assets.sprite[obj1] = new Image(); 
        AssetManager.this.assets.sprite[obj1].src = o.sprite[obj1]; 
       } 
      } 
      AssetManager.this.get = function (tag, name) { 
       return assets[tag][name]; 
      } 
     } 
    }); 
} 
+0

Почему вы положили вызов ajax внутри определения класса? – gurvinder372

+0

'AssetManager.this'? Разве он не выделял ничего в консоли? – Rayon

+0

@ gurvinder372 Чтобы он мог быть запущен с объектом, он был заложен – Thatsuperfly

ответ

0

Вы должны создать переменную и указать его в этом ранее исполняющего AJAX и доступ к нему в обработчик успеха:

function AssetManager(path) { 
    // ...... 
    // Set this object to me variable 
    var me = this; 

    $.ajax({ 
    url: path, 
    dataType: 'json', 
    success: function(o) { 
     if (o.sprite) { 
      var keys = Object.keys(o.sprite); 
      for (var i = 0; i < keys.length; i++) { 
       var obj1 = keys[i]; 
       me.assets.sprite[obj1] = new Image(); 
       me.assets.sprite[obj1].src = o.sprite[obj1]; 
      } 
     } 
     me.get = function (tag, name) { 
      return assets[tag][name]; 
     } 
    } 
}); 
0

Assumming, что ваш Аякса вызов предположим lazyly инициализации других свойств вашего AssetManager, вам необходимо сохранить ссылку this, чтобы ее можно было использовать внутри метода ajax (где изменится значение this)

function AssetManager(path) { 

    this.assets = {}; 

    this.get = function(tag,name) { 
     return 0; 
    }; 

    var self = this; 

    $.ajax({ 
     url: path, 
     dataType: 'json', 
     success: function(o) { 
      if (o.sprite) { 
       var keys = Object.keys(o.sprite); 
       for (var i = 0; i < keys.length; i++) { 
        var obj1 = keys[i]; 
        self.assets.sprite[obj1] = new Image(); 
        self.assets.sprite[obj1].src = o.sprite[obj1]; 
       } 
      } 
      self.get = function (tag, name) { 
       return assets[tag][name]; 
      } 
     } 
    }); 
} 
Смежные вопросы