Обратный вызов SignalR в javascript

Есть ли способ передать функцию обратного вызова для 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
        }

    };

Это работает, но мне было интересно, есть ли более чистый метод. Любая помощь очень ценится.


person pallu    schedule 21.03.2013    source источник
comment
Откуда вы хотите указать функцию обратного вызова? Вы хотите, чтобы сервер предоставлял функцию обратного вызова при вызове метода концентратора на стороне клиента? Ваш вопрос мне не ясен.   -  person halter73    schedule 21.03.2013


Ответы (1)


Используйте замыкания:

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


messageHub.client.sendProgress = createFunction(callback)

Сначала вы определяете функцию createFunction, которая с учетом обратного вызова возвращает другую функцию с одним аргументом, который вызывает указанный обратный вызов.

Затем вы присваиваете результат вызова этой функции сигналу sendProgress.

Другими словами: для каждого обратного вызова, который вы хотите, вы динамически генерируете функцию с одним аргументом, которая вызывает обратный вызов и передает ему аргумент.

person Palo    schedule 13.04.2013