2013-07-25 124 views
0

我用微風使用typescript。我如何將打字稿功能傳遞給executeQuery.then作爲Javascript函數傳遞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.bind(this)而不是this.myFunc


更多有關方面,請參閱"this"和MDN "Function.prototype.bind"文章。

+0

抱歉遺忘添加此項。但是用'this'這個函數也沒有被調用。 – daniel

+0

然後它可能是上下文問題,請嘗試'this.myFunc.bind(this)'。 – Mics

+0

我應該在哪裏調用綁定? – daniel

0

首先,這在我自己的課堂上完美地工作。什麼是「不工作」,什麼錯誤信息被拋出?

其次,可以肯定的說,「這」是我的打字稿類方面,我總是用這樣的拉姆達:

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

在這種情況下,TS編譯器產生一個「無功_this =這個」開頭的doQuery函數,它是您的類上下文,並將「this.myFunc(data)」調用轉換爲「_this.myFunc(data)」。

更好的使用類型聲明,如「breeze.QueryResult」而不是任何。