2013-03-21 3 views
3

Есть ли способ передать функцию обратного вызова для SignalR? Сейчас у меня есть на моем site.jsОбратный вызов SignalR в javascript

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 
     } 

    }; 

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

+0

Откуда вы хотите указать функцию обратного вызова? Вы хотите, чтобы сервер предоставлял функцию обратного вызова при вызове метода клиентской стороны? Твой вопрос мне непонятен. – halter73

ответ

3

Использование укупорочные:

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


messageHub.client.sendProgress = createFunction(callback) 

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

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

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

Смежные вопросы