在javascript中的SignalR回调

时间:2013-03-21 15:34:34

标签: signalr signalr.client

有没有办法为SignalR传递回调函数?现在我已经site.js

messageHub.client.sendProgress = function (progress) {
        //doSomething with progress
}

我想拥有的是

messageHub.client.sendProgress = function (progress,callback) {
        callback(progress);
}

这使我能够从同一个signalR方法的网页定义不同的回调函数。 现在我通过在我的网页上定义一个函数来实现它的黑客方式

function fnSendProgress(progress) //define this for site.js.
    {
        //do something here
    }

然后在site.js中通过

调用它
messageHub.client.sendProgress = function (progress) {
        debugger;
        //have a definition of a function called fnSendProgress(progress)
        //if found it will call it else call default
        if (typeof fnSendProgress == 'function') {
            fnSendProgress(progress);
        }
        else {
                //do something at site.js level
        }

    };

它有效,但我想知道是否有更清洁的方法。 任何帮助非常感谢。

1 个答案:

答案 0 :(得分:3)

使用闭包:

function createfunction(callback)
{
    return function(progress) { callback(progress); }
}


messageHub.client.sendProgress = createFunction(callback)

首先定义一个函数“createFunction”,给定一个回调返回另一个带有一个参数的函数,该函数调用指定的回调。

然后将调用该函数的结果分配给signalr的sendProgress。

换句话说:对于每个回调,您希望动态生成一个带有一个参数的函数,该函数调用回调并将参数传递给它。