2013-07-25 5 views
0

typescript를 breeze와 함께 사용합니다. typescript 함수를 executeQuery.then에 전달하려면 어떻게해야합니까?Typescript 함수가 자바 스크립트 함수로 전달

class MyClass{ 
... 
    myFunc(data:any):void{ 
     ... 
    } 

    doQuery():void{ 
     var manager = new breeze.EntityManager('/breeze/dbentities'); 
     var query = breeze.EntityQuery.from("Corporations").where("Name", "startsWith", "Zen"); 
     manager.executeQuery(query) 
       .then(this.myFunc); // does not work! 
    } 
} 

답변

1

사용 this.myFunc 대신 myFunc.

문맥 문제 일 수 있습니다. this.myFunc 대신 this.myFunc.bind(this)을 시도하십시오. 자세한 내용에 대한 상황, "this" 및 MDN에서 "Function.prototype.bind" 기사를 참조하십시오


.

+0

죄송합니다.이 점을 잊어 버렸습니다. 그러나'this' 함수는 호출되지 않습니다. – daniel

+0

그러면 컨텍스트 문제 일 수 있습니다.'this.myFunc.bind (this)'를 시도하십시오. – Mics

+0

바인딩을 어디에 호출해야합니까? – daniel

0

먼저 내 수업에서 완벽하게 작동합니다. "작동하지 않는 것", 어떤 오류 메시지가 표시됩니까? "이 = var에 _this"처음에 TS 컴파일러는 생산이 경우

doQuery(): void { 
    ... 
    manager.executeQuery(query).then((data: breeze.QueryResult) => { 
     this.myFunc(data); 
    }); 
} 

:

둘째, "이"내 타이프 라이터 클래스 컨텍스트 난 항상 이런 람다를 사용 할 수 있는지 클래스 컨텍스트 인 doQuery 함수를 호출하고 "this.myFunc (data)"호출을 "_this.myFunc (data)"로 변환합니다.

"대신 breeze.QueryResult"와 같은 형식 선언을 사용하는 것이 좋습니다.

관련 문제