2013-10-13 3 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

ли вы подтвердить, что 'this' в обработчике' .on' не является самим сокетом? если нет, вы можете просто «socket.on» («myevet», myEvtHandler.bind (сокет)); ' –

ответ

7

Вы можете создать частичную функцию с помощью bind:

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

bind() возвращает функцию с первыми двумя аргументами уже «заполненными». Первый аргумент, переданный в bind() (null в этом случае), будет объектом this в вашем обработчике (more info).

Любые дополнительные аргументы, передаваемые по socket.io обработчику будет доступен с третьего аргумента года:

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

Кроме того, это будет делать (почти) то же самое:

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

Спасибо! Работает очень хорошо. – Boyang

+0

Как насчет исходного аргумента «данных», который по умолчанию передается сокет.on? Как получить доступ к этому? – Boyang

+0

@CharlesW. это передано в качестве третьего аргумента вашему обработчику – robertklep

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