使用Typescript实现SignalR客户端回调函数

时间:2014-06-11 11:23:56

标签: signalr typescript

我试图让SignalR和Typescript一起工作。

我收到了以下文件:

/// <reference path="../../vendor/jquery/jquery.d.ts" />

interface SignalR {
    roleHub: IRoleHub;
} 

interface IRoleHub {
    server: IRoleHubServer;
    client: IRoleHubClient;
}

interface IRoleHubServer {
    getUserRoles();
}

interface IRoleHubClient {
    populateUserRoles(names: string[]) : IRoleHubClient;
}

以下类实现IRoleHub:

module Portal.App {
    export class Controller implements IRoleHub {
        role: Portal.App.Model.IRole;

        server: IRoleHubServer;
        client: IRoleHubClient;

        constructor(role: Portal.App.Model.IRole) {
            this.role = role;
            this.server = $.connection.roleHub.server;
            this.client = $.connection.roleHub.client;
        }

        getUserRoles() {
            this.server.getUserRoles();
        }

        populateUserRoles(roles: string[]) {
            console.log('populated');
        }
    }
}

我在另一个文件中调用了getUserRoles,并且正在调用我的服务器端函数,但是我很难实现populateUserRoles客户端回调。

在Javascript中,我会做到:

connection.client.populateUserRoles = function (roles) {
    [...]
}

但是我上面的代码会生成以下输出,这是不正确的:

Controller.prototype.populateUserRoles = function (roles) {
                        console.log('populated');
                    };

我将非常感谢您实施此功能的任何帮助。

1 个答案:

答案 0 :(得分:1)

以下是一种应该有效的方法:

   constructor(role: Portal.App.Model.IRole) {
        this.role = role;
        this.server = $.connection.roleHub.server;
        this.client = $.connection.roleHub.client;
        this.client.populateUserRoles = (roles)=> this.roles(roles);
    }