3

有没有办法为 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
        }

    };

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

4

1 回答 1

3

使用闭包:

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


messageHub.client.sendProgress = createFunction(callback)

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

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

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

于 2013-04-13T08:10:45.893 回答