2011-03-07 7 views
5

मैं अपने nodejs सर्वर में "socket.io" का उपयोग कर रहा हूं। क्या मेरे वर्ग/मॉड्यूल (ब्राउज़र में) के दायरे में पंजीकृत ईवेंट फ़ंक्शंस चलाने का कोई तरीका है?socket.io (नोडजेस में) के इवेंट हैंडलर को अपने दायरे में कैसे बाध्य करें?

... 
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

मुझे लगता है कि वी 8 का समर्थन करता है "बाँध()" समारोह:

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

कॉल "बाँध" एक समारोह है कि कॉल करेंगे अपने समारोह ऐसा है कि this सेट किया गया है करने के लिए वापस आ जाएगी आपके द्वारा पारित तर्क के लिए (इस मामले में, this कॉल के संदर्भ से "init" फ़ंक्शन तक)।

संपादित — "बाँध()" क्रोम में समारोह प्रोटोटाइप में वहाँ है, इसलिए मैं यह नोड में ठीक काम करता है की कल्पना।

यहाँ तुम क्या एक ब्राउज़र में (एक है कि समारोह उपलब्ध मिला है, जैसे Chrome) की कोशिश कर सकते हैं:

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

दुर्भाग्य से मेरे पास इसका परीक्षण करने के लिए कोई क्रोम नहीं है और यह फ़ायरफ़ॉक्स में काम नहीं करता है। क्या कोई दूसरा रास्ता है? – koalabruder

+0

अच्छी तरह से इसे Node.js में आज़माएं - इसे काम करना चाहिए। – Pointy

+0

आपको भी वास्तव में क्रोम का प्रयास करना चाहिए - यह एक अच्छा ब्राउज़र है और बहुत तेज़ है :-) – Pointy

3

मैं साथ

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

नुकीले के लिए धन्यवाद मेरी YUI3 संदर्भ में हल कर लिया है शब्द "बांध" के लिए।

संबंधित मुद्दे