3

SignalRのコールバック関数を渡す方法はありますか?今私はsite.js

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

私が欲しいのは

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

これにより、同じsignalRメソッドに対してWebページからさまざまなコールバック関数を定義できるようになります。今、私は自分のWebページで関数を定義することによって、一種のハックっぽい方法でそれを行っています。

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」を定義します。この関数は、指定されたコールバックが 1 つの引数を持つ別の関数を返し、指定されたコールバックを呼び出します。

次に、その関数を呼び出した結果を signalr の sendProgress に割り当てます。

つまり、必要なコールバックごとに、1 つの引数を持つ関数を動的に生成し、コールバックを呼び出して引数を渡します。

于 2013-04-13T08:10:45.893 に答える