SignalR打字稿客户端中的页面上下文

时间:2017-12-05 17:45:02

标签: jquery typescript signalr

在一个打字稿SignalR客户端中,如何在从异步中枢事件或承诺返回期间访问类范围,例如:

Client.ts

class Client {
    private _elementId: string;

    constructor(elementId: string){
       this._elementId = elementId
    }

    $.connection.hub.start()
        .done(function () {
            $("#" + this._elementId).html("Connection Id" + $.connection.hub.id);
           })
        .fail((err) => {
            $("#" + this._elementId).html("Error occured"); 
           });

    // handlers - methods called by the SignalR Hub
    $.connection.myHub.client.notification = function (message) {
        $("#" + this._elementId).html(message);
    };

}

对于上述startnotification方法的承诺,this的范围已丢失,因此我无法访问_elementId成员变量。

1 个答案:

答案 0 :(得分:2)

您可以在() => {}处理程序上使用箭头函数done来维护词法范围,类似于使用fail处理程序的方式。这将允许this引用处理程序中的类实例:

class Client {
    private _elementId: string;

    constructor(elementId: string){
       this._elementId = elementId
    }

    $.connection.hub.start()
        .done(() => {
            $("#" + this._elementId).html("Connection Id" + $.connection.hub.id);
        })
        .fail((err) => {
            $("#" + this._elementId).html("Error occured"); 
        });

    // handlers - methods called by the SignalR Hub
    $.connection.myHub.client.notification = function (message) {
        $("#" + this._elementId).html(message);
    };

}

这是一个简单的example。注意控制台中的消息。

希望这有帮助!