2013-03-21 47 views
3

有沒有辦法爲SignalR傳遞迴調函數?現在,我有我的site.jsjavascript中的signalR回調

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 2013-03-21 17:41:29

回答

3

使用閉:

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


messageHub.client.sendProgress = createFunction(callback) 

首先定義一個函數「createFunction」,這給回調有一個參數,調用指定的回調返回另一個函數。

然後,將調用該函數的結果分配給signalr的sendProgress。換句話說:對於每個回調,你都希望用一個參數動態生成一個函數,該參數調用回調並將參數傳遞給它。