2013-08-21 5 views
2

Я не могу найти хороший способ передать дополнительные параметры Socket.io «на» обработчика, то есть:Socket.io «на» функции - передать дополнительные параметры

var someEventHandler = require('someEventHandler'), 
    additionalData = {test: 1}; 
socket.on('event', someEventHandler); 

Теперь я хочу, чтобы получить доступ к additionalData объект внутри someEventHandler, который находится в другом файле. Есть ли аналогичный способ передать аргументы обработчикам, например jQuery 'on'? ($obj.on('event', '.selector', dataObject, handlerFunction))

ответ

3

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

var someEventHandler = require('someEventHandler'), 
    additionalData = {test: 1}; 
socket.on('event', function(e) { someEventHandler(e, additionalData); }); 
+0

Да, я знаю, что это так, но это кажется уродливым мне, и я подумал, что на самом деле должно быть что-то вроде JQuery «на» дает нам. –

0

Поскольку вам не нравится упаковка для выполнения обратного вызова самостоятельно, вы можете изменить функцию socket.on, чтобы он соответствовал вашим желаниям. Что-то вроде

const originalOn = socket.on; 
socket.on = function (event, data, callback) { 
    return originalOn.call(socket, event, (e) => callback(e, data)); 
}; 

Теперь вы можете использовать его так:

let data = {/* important data */}; 
socket.on('importantEvent', data, (e, additionalData) => { 
    // Have fun with your data 
}); 
Смежные вопросы