相关疑难解决方法(0)

如何使用回调函数在TypeScript中保留词法范围

我有一个TypeScript类,有一个我打算用作回调的函数:

removeRow(_this:MyClass): void {
    ...
    // 'this' is now the window object
    // I must use '_this' to get the class itself
    ...
}
Run Code Online (Sandbox Code Playgroud)

我将它传递给另一个函数

this.deleteRow(this.removeRow);
Run Code Online (Sandbox Code Playgroud)

反过来调用jQuery Ajax方法,如果成功,则调用这样的回调:

deleteItem(removeRowCallback: (_this:MyClass) => void ): void {
    $.ajax(action, {
        data: { "id": id },
        type: "POST"
    })
    .done(() => {
        removeRowCallback(this);
    })
    .fail(() => {
        alert("There was an error!");
    });
}
Run Code Online (Sandbox Code Playgroud)

我可以保留我的类的'this'引用的唯一方法是将其传递给回调,如上所示.它有效,但它是裤子代码.如果我没有像这样连接'this'(抱歉),那么回调方法中对此的任何引用都已恢复为Window对象.因为我一直在使用箭头函数,所以我期望'this'将是类本身,因为它在我班级的其他地方.

任何人都知道如何在TypeScript中传递回调,保留词法范围?

javascript callback typescript

37
推荐指数
3
解决办法
3万
查看次数

TypeScript类函数不可用

我正在尝试调用TypeScript类的实例方法(在ASP.NET MVC项目中).但是,在运行时我会遇到异常0x800a01b6 - JavaScript runtime error: Object doesn't support property or method 'checkString'.

我在jsfiddle中复制了生成的JavaScript,其中方法似乎有效.
我不是一个真正的JavaScript人,所以非常感谢任何帮助!

到目前为止我尝试过的事情:

  1. 不同的浏览器(铬:Uncaught TypeError: undefined is not a function,FF: TypeError: this.checkString is not a function)
  2. 清除浏览器缓存
  3. 删除IIS Express的临时文件
  4. 清理和重建解决方案
  5. 不使用私有修饰符
  6. 在另一台机器上启动项目
  7. 用假人替换underscore.js调用来验证这不是问题
  8. 检查实例成员是否已正确设置

这是TypeScript代码:

class FormData {
    BlogName: string;
    CacheTimeOut: number;
    CopyrightHolder: string;
    NavBarTitle: string;
    MarkdownExtra: boolean;
    MarkdownSanitize: boolean;
    RatingActive: boolean;
    HtmlEditor: boolean;

    constructor(blogName: string, cacheTimeOut: number, copyrightHolder: string, navBarTitle: string, markdownExtra: boolean, markdownSanitize: boolean, ratingActive: boolean, htmlEditor: boolean) …
Run Code Online (Sandbox Code Playgroud)

javascript typescript

11
推荐指数
2
解决办法
2万
查看次数

打字稿:私人成员突然未定义

因此,我有一个基本的Typescript应用程序,它实际上不会引起任何重大问题,但是看来这里出了点问题,我也不知道是什么。

我的班级确实有这个私有成员minUpdateRate,该成员在GameContainer构造函数中初始化。这似乎进展顺利,因为在GameContainer.start()调用时,该console.log()方法将打印出来1

但是,当GameContainer.render()调用该方法时,似乎超出了范围之类,log方法undefined在那里输出。

我是TypeScript的新手,对JavaScript也没有那么深入(特别是在范围方面,这对我来说是令人困惑的:/)。但是,我该如何解决呢?

主班:

class TwoDGame extends Game {
    public static main(context:CanvasRenderingContext2D) {
        var game:Game = new TwoDGame();
        var container:GameContainer = new GameContainer(context, game);

        container.start();

        return game;
    }
}
Run Code Online (Sandbox Code Playgroud)

游戏容器类:

class GameContainer {
    ...
    private minUpdateRate:number;
    private game:Game;
    private time:number;
    ...

    constructor(context:CanvasRenderingContext2D, game:Game) {
        ...
        this.minUpdateRate = 1;
        this.game = game;
    }

    public start() {
        ...
        console.log(this.minUpdateRate);
    }

    public render() {
        var now:number = new …
Run Code Online (Sandbox Code Playgroud)

javascript this private-members setinterval typescript

2
推荐指数
1
解决办法
3419
查看次数