2015-12-08 4 views
0

Я использую ExtJS Framework.JavaScript - как передать область в метод reader.onload

Внутри моего reader.onload fn Я делаю запрос Ajax, и в функции успеха я вызываю другую функцию, используя «this», но «this» не определен.

reader.onload = function(e){ 
    //do stuff 

    Ext.Ajax.request({ 
    url:url, 
    params:params, 
    method:"POST", 
    scope:this, 
    success:function(resp){ 
     //decode resp; 
     console.log(this);//FileReader obj, not the controller obj this code is in 
     if(resp.something){ 
     this.foo(resp); //this.foo isundefined 
     } 
    } 
    }); 
}; 

В другом месте на SO в другой пост кто-то ответил прохождение сферы следующим образом:

reader.onload = (function(e){ 
    //do stuff 
}(this)); 

но когда я делаю, что «е» становится неопределенным.

+0

Таким образом, вы хотите ссылаться на «читатель» изнутри «успеха»? –

+0

no Я хочу, чтобы «это» ссылалось на класс контроллера, в котором весь этот код находится в – stackato

ответ

2

Вы можете сохранить ссылку на нужный объект, используя что-то вроде self.

var self = this; 
reader.onload = function(e) { 
    ... 
    Ext.Ajax.request({ 
    url:url, 
    params:params, 
    method:"POST", 
    scope:self, 
    success:function(resp){ 
     if(resp.something){ 
     this.foo(resp); 
     } 
    } 
    }); 
}; 
+0

ах, да. Забыл об этом. Я использовал его в другом месте раньше. Но было более любопытно, как передать параметр области. – stackato

+0

@stackato Какую версию ExtJS вы используете? –

+0

4.2.3 ............ – stackato

Смежные вопросы