2016-11-10 1 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    
    }); 
} 

약속이 해결 된 후 함수가 필요하지만 그 밖의 함수에 액세스 할 수없는 데이터가 있습니다.
더 자세한 설명을 위해 편집 :이 변수는 window.i가 경로를 참조 할 수있게하려는 기능입니다.쿼리 함수 내에서 자체 변수에 액세스 할 수 없습니다.

+1

당신은 거기에 액세스 할 수 있습니다

왜 캔트이의 컨텍스트를 유지합니다 화살표 기능을 사용한다. 어떤 문제도 없을 것입니다. –

+0

'this'는'window'입니다. – 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

?

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

그러나'a'에 접근 할 수있는 것은'this'와 아무 관련이 없습니다. –

+0

하지만 분명히 '이'와 관련이 있습니다! 원래 게시물에 'this'가 'window'에 대한 참조라고 주장되었는데 - 왜 그런가요? 왜냐하면'then '의 익명의 클로저 함수는'this'의 값을'window'로 바꾸었기 때문에'this.a'가 존재하지 않기 때문입니다. ('window.a'는 정의되지 않습니다.) 'fat'화살표 함수를 사용하면 'this'가 보존되어'this.a'를 사용할 수 있습니다. 이것은 정확히 '.bind (self)'가하고있는 것입니다. 즉,'this '의 문맥을 클로저 함수에 바인딩합니다. 어쨌든 둘 다 작동합니다 ... 내가 뭔가를 놓치지 않는 한 ?? – mrlion

관련 문제