Как привязать обработчик события socket.io (в nodejs) к моей собственной области видимости? - PullRequest
5 голосов
/ 07 марта 2011

Я использую "socket.io" на моем сервере nodejs.Есть ли способ запустить зарегистрированные функции событий в области моего класса / модуля (в браузере)?

...
init: function() {
  this.socket = new io.Socket('localhost:3000'); //connect to localhost presently
  this.socket.on('connect', this.myConnect);
},
myConnect: function() {
  // "this.socket" and "this.f" are unknown
  // this.socket.send({});
  // this.f();
},
f: function() {
  // ...
}
...

Ответы [ 2 ]

16 голосов
/ 07 марта 2011

I думаю V8 поддерживает функцию "bind ()":

this.socket.on('connect', this.myConnect.bind(this));

Вызов "bind" вернет функцию, которая вызовет ваш функция такая, что this устанавливается на передаваемый вами аргумент (в данном случае this из контекста вызова этой функции "init").

edit - "bind () "есть в прототипе Function в Chrome, поэтому я думаю, что он отлично работает в узле.

Вот что вы можете попробовать в браузере (тот, у которого есть доступная функция, например, Chrome):

 var f = (function() { alert(this); }).bind("hello world");
 f();
3 голосов
/ 07 марта 2011

Я решил это в контексте YUI3 с помощью

this.socket.on('connect', Y.bind(this.myConnect, this));

Спасибо Pointy за слово "bind".

...