2016-11-10 4 views
-1
//This is a Route 
function doSomething(){ 
var self=this; 
var a,b,c; 
//do something 
reqArray="somevalue"; 
this.store.query("record",{"filter":"[{'api_name':'somevalue','comparator':'somevalue','value':"+reqArray+"}]"}) 
    .then(function(data){      
    //can't access a,b,c or self    
    }); 
} 

Я получаю данные, которые мне нужны внутри функции then после того, как обещание разрешено, но я не могу получить доступ к чему-либо вне функции then.
Редактирование для уточнения: эта переменная внутри тогда функция window.i хочет иметь возможность ссылаться на маршрут.Невозможно получить доступ к переменной self внутри функции запроса

+1

Вы можете получить доступ к его там. Проблем не будет. –

+0

'' '' '' находится там – Li357

+0

, так как я могу получить доступ к себе в doSomething внутри? –

ответ

-1

Если вам действительно нужны все ваши ВАРЫ в вашем объекте, вы можете сделать что-то вроде этого:

function doSomething(){ 
    var self=this; 
    var a,b,c; 
    //do something 
    // Save value 
    self.a = a; 
    self.b = b; 
    self.c = c; 
    reqArray="somevalue"; 
    this.store.query("record",{"filter":"[{'api_name':'somevalue','comparator':'somevalue','value':"+reqArray+"}]"}).then(
     (function(data){      
      // this = self 
      // this.a = a 
      // ...    
     }).bind(self)); 
} 
+0

Зачем это нужно? –

+0

Я не сказал, что это необходимо. Это просто способ сделать это, особенно если вы хотите изменить 'this' в функции – Fefux

-1

вы используете Ember правильно?

почему косяк вы используете функцию стрелки, которая будет сохранять контекст этого:

.then((data)=> {...}) 
+0

Но наличие доступа к' a' и т. Д. Не должно иметь ничего общего с 'this'. –

+0

Но ясно, что это имеет все, что связано с 'этим' ?! В оригинальном посте было заявлено, что 'this' было ссылкой на' window' - почему это? Это потому, что анонимная функция закрытия внутри 'then' изменила значение' this' на 'window', поэтому почему this.a' не существовало. ('window.a' не будет определено). Используя функцию« fat »arrow, это будет сохранено, и вы сможете использовать' this.a' внутри. Это именно то, что делает «.bind (self)» - привязка контекста 'this' к функции закрытия. В любом случае оба будут работать ... если я не пропущу что-то ??? – mrlion

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