0

我在微风中使用打字稿。我如何将打字稿函数传递给executeQuery.then

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!
    }
}
4

2 回答 2

1

Use this.myFunc instead of myFunc.

It might be a context problem. Try this.myFunc.bind(this) instead of this.myFunc.


For more information about context, refer "this" and "Function.prototype.bind" article from MDN.

于 2013-07-25T09:10:09.263 回答
0

首先,这在我自己的课程中运行良好。什么是“不工作”,抛出什么错误信息?

其次,为了确保“this”是我的 typescript 类上下文,我总是使用这样的 lambda:

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

在这种情况下,TS 编译器在 doQuery 函数的开头生成一个“var _this = this”,这是您的类上下文,并将“this.myFunc(data)”调用转换为“_this.myFunc(data)”。

并且更好地使用类型声明,例如“breeze.QueryResult”,而不是任何。

于 2014-05-23T08:00:56.223 回答