2012-04-12 18 views
5

एक आम समस्या को सुरुचिपूर्ण समाधान के लिए खोज रहे बचाएं:कॉफी स्क्रिप्ट वर्ग संदर्भ और घटना संदर्भ

मैं एक वर्ग है कि कुछ घटनाओं की सदस्यता मिल गया, मैं हैंडलर मेरी कक्षा के अंदर एक उदाहरण विधि होना चाहता हूँ, लेकिन घटना संदर्भ (इस मामले के लिए घटना को निकाल दिया गया तत्व) प्राप्त करना चाहते हैं।

मैं विधि परिभाषा के लिए वसा रेखा वाक्यविन्यास का उपयोग कर रहा हूं लेकिन घटना संदर्भ प्राप्त करने का कोई तरीका नहीं मिला। कंक्रीट होने के लिए मैं राफेल जेएस का उपयोग कर रहा हूं और तत्व पर सब्सक्राइब करते समय ईवेंट ऑब्जेक्ट में तत्व नहीं होता है, केवल ईवेंट तत्व के बिना डोम तत्व होता है, मुझे कागज़ के अंदर इसके रैफेल आईडी द्वारा तत्व खोजना होगा, और मैं इसे पसंद नहीं है।

इस मामले में सबसे अच्छा अभ्यास क्या है? जब भी मैं ईवेंट की सदस्यता लेता हूं, मैं वर्तमान में एक नया संदर्भ वस्तु बना रहा हूं, संदर्भ में इंस्टेंस संदर्भ और तत्व संदर्भ शामिल है।

उत्तर

5

यदि मैं आपको सही ढंग से समझता हूं तो आप हैंडलर फ़ंक्शन में बाध्य और अनबाउंड संदर्भों दोनों के संदर्भों को संदर्भ रखना चाहते हैं। आप मैन्युअल रूप से वसा तीर के समान कुछ करने के द्वारा इसे प्राप्त कर सकते हैं:

class TheListenerObject 
    constructor: -> 
    context = @ # some people may call it `self` 
    @theHandlerMethod =() -> 
     referenceToTheListenerObjectInstance = context 
     referenceToTheUnboundContext = @ 
+0

यह सामान्य समाधान है ... यह काम करेगा लेकिन इसमें कुछ जादू हो गया है। इस कोड को चलाने के लिए संदर्भ प्रत्येक नए ऑब्जेक्ट ऑब्जेक्ट में हैंडलर विधि के साथ लपेटा जाएगा। (जेएस की प्रकृति के रूप में) यदि मैं अस्तित्व में हूं तो मैं क्लीनर तरीके से खोज रहा हूं। जैसा कि मैंने कहा था कि मैंने इस मुद्दे से बचने के लिए हैंडलर के अंदर संदर्भ बनाया है। –

+1

@ चेनकिन्टर तो आप बेहतर कुछ कोड उदाहरण प्रदान करते हैं। यह समझना बहुत मुश्किल है कि आप वास्तव में क्या चाहते हैं और जो आपने पहले ही हासिल कर लिया है। एक बात जो मैं निश्चित रूप से कह सकता हूं वह यह है कि यदि आप चाहते हैं कि फ़ंक्शन बाहरी ऑब्जेक्ट से किसी ऑब्जेक्ट को संदर्भित करे, तो आपको अनिवार्य रूप से इसे किसी चरण में बंद करने के लिए लपेटना होगा और फिर प्रत्येक नए संदर्भ के लिए फ़ंक्शन को फिर से शुरू किया जाएगा। यहां कोई जादू नहीं है, बस जावास्क्रिप्ट। –

+0

बेहतर तरीका ठीक नहीं कर सका, धन्यवाद। –

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