2011-03-07 4 views
5

내 nodejs 서버에서 "socket.io"를 사용하고 있습니다. 내 클래스/모듈 범위 (브라우저에서)에 등록 된 이벤트 함수를 실행하는 방법이 있습니까?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() { 
    // ... 
} 
... 

답변

14

내가 V8 생각 가 지원 "바인드()"기능 :

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

호출은 "바인딩"this를 설정하여 기능하도록 호출하는 함수를 반환합니다 (이 경우에는 "init"함수 호출의 컨텍스트에서 this) 전달하십시오.

편집 — "bind()"는 Chrome의 함수 프로토 타입에 있으므로 노드에서 정상적으로 작동한다고 상상해보십시오. 여기

는 브라우저에서 (크롬과 같은 기능을 사용할 수있어 하나를) 시도 할 수있는 작업은 다음과 같습니다 나는 뾰족한에

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

덕분에 내 YUI3의 맥락에서 그것을 해결 한

var f = (function() { alert(this); }).bind("hello world"); 
f(); 
+0

불행히도 Chrome을 테스트 할 필요가 없으며 Firefox에서 작동하지 않습니다. 다른 방법이 있습니까? – koalabruder

+0

그럼 Node.js에서 시도해보십시오 - 작동해야합니다. – Pointy

+0

또한 Chrome을 사용해보세요. 좋은 브라우저이고 매우 빠릅니다. – Pointy

관련 문제