2013-10-13 50 views
3

對於socket.on(「someChannel」,處理程序),我希望把解壓出來我的處理函數到另一個文件。因此,他們需要通過套接字obj和一些更多的附加信息。如何通過對socket.on多個參數()

像:

socket.on("myEvt", myEvtHandler); 

myEvtHandler(socket, additionalInfo, data) {//some stuff here} 

但我不能。我能想到的最好的辦法是關閉:

(function(socket, addtionalInfo) { 
    socket.on("myEvt", function(data) { 
     myEvtHandler(socket, addtionalInfo, data); 
    }); 
})(socket, addtionalInfo); 

這是正確的嗎?有更好的方法嗎?

+0

你驗證'.on'處理程序中的'this'不是套接字本身?如果沒有,你可以''socket.on('myevet',myEvtHandler.bind(socket));' –

回答

7

您可以使用bind的部分功能:

socket.on("myEvt", myEvtHandler.bind(null, socket, additionalInfo)); 

bind()將返回功能與已經「填入」前兩個參數。傳遞給bind()null在這種情況下)的第一個參數將是在你的處理器(more info)的this對象。

通過socket.io傳遞給處理程序的任何額外的參數將可從第三個參數開始:

function myEvtHandler(socket, additionalInfo, data) { ... } 

同樣,這會做(幾乎)相同:

socket.on("myEvt", function(data) { 
    myEvtHandler(socket, additionalInfo, data); 
}); 
+0

謝謝!工作得很好。 – Boyang

+0

原來的「data」參數如何,默認由socket.on傳入?如何訪問? – Boyang

+0

@CharlesW。這是作爲第三個參數傳遞給你的處理程序 – robertklep