2008-11-26 8 views
12

जहां तक ​​मैं समझता हूं, एक्शनस्क्रिप्ट में एक var के लिए बाध्यकारी घटनाओं के माध्यम से किया जाता है जो एक var बदल जाता है जब स्वचालित रूप से निकाल दिया जाता है। मेरे पास इसके बारे में कुछ प्रश्न हैं:एक्शनस्क्रिप्ट काम में बाध्यकारी कैसे काम करता है?

  1. क्या होता है यदि वर्ग स्पष्ट रूप से EventDispatcher का विस्तार नहीं करता है? क्या कंप्रेसर में कुछ प्रकार का जादू चल रहा है जो अनिवार्य रूप से कक्षा को इवेंट डिस्पैचर बनाता है?
  2. स्थिर युद्धों के लिए बाध्यकारी कैसे काम करता है? क्या किसी प्रकार का अंतर्निहित स्थैतिक addEventListener() फ़ंक्शन कक्षा में जोड़ा गया है?
  3. मैंने देखा है कि आप स्थिर बर्स पर [बाइंडबल] डाल सकते हैं लेकिन स्थिर कार्य नहीं, यह क्यों है?

संपादित करें: अपने रोशन जवाब के लिए क्रिस्टोफ़ Herreman को

धन्यवाद। हालांकि, मेरे ऊपर उपरोक्त मेरे प्रश्नों से कुछ फॉलो-ऑन हैं। मुझे आश्चर्य है कि अगर कोई मेरे लिए अंतराल भर सकता है (मैंने इन सवालों को 4, 5, 6 को नंबर देने की कोशिश की है, लेकिन वे किसी कारण से 1, 2, 3 दिखाते हैं!)

  1. मैंने कंपाइलर को रखरखाव विकल्प जोड़ा है और जेनरेट बाध्यकारी कोड को देखा है। क्या कोई यह समझा सकता है कि यह कोड कैसे लागू किया जाता है? संकलक प्रत्येक वर्ग के लिए बाइंडेबलप्रोपर्टी नामक एक कक्षा उत्पन्न करता प्रतीत होता है, जिसमें गेटर और सेटर होता है। यह मेरे द्वारा लिखे गए वर्ग में कैसे जुड़ जाता है? यह सुविधा सी # में आंशिक कक्षाओं की तरह दिखती है - क्या यह विशेष रूप से पीछे की तरफ संकलक कार्यक्षमता है, या यह कुछ है जो मैं स्वयं का उपयोग कर सकता हूं?

  2. बाइंडेबलप्रोपर्टी क्लास अभी भी EventDispatcher को स्पष्ट रूप से लागू नहीं करता है, जेनरेट क्लास इवेंट प्रेषण कैसे कार्यान्वित करता है?

  3. प्रश्न 3 में, मैंने स्थिर कार्यों के लिए बाध्यकारी होने के बारे में पूछा, लेकिन मुझे वास्तव में स्थिर गेटर और सेटर फ़ंक्शंस का मतलब था। ऐसा प्रतीत नहीं होता है।

उत्तर

14

बाइंडिंग वास्तव में ईवेंट प्रेषण के माध्यम से काम करते हैं। आप कंपाइलर सेटिंग्स में रखरखाव ध्वज जोड़कर जेनरेट किए गए एक्शनस्क्रिप्ट कोड से बहुत कुछ सीख सकते हैं।

मैं आपके सवालों का जवाब देने की कोशिश करूंगा।

  1. संकलक [Bindable] मेटाडाटा टैग लेने जाएगा और प्रत्येक प्रॉपर्टी bindable के रूप में चिह्नित के लिए एक गेटर और सेटर पैदा करेगा। गेटटर सिर्फ संपत्ति का मूल्य वापस कर देगा। सेटर यह जांच करेगा कि नया मान मूल मूल्य से अलग है या नहीं और यदि यह करता है तो PropertyChange ईवेंट प्रेषित करेगा।

  2. मूल रूप से उदाहरण गुणों के समान ही, केवल अब एक स्थिर गेटर और सेटर बनाए जाते हैं। इसके अलावा, एक mx.binding.StaticPropertyWatcher स्थिर गुणों में परिवर्तन देखने के लिए बनाया गया है।

  3. जब एक स्थिर विधि से बाध्यकारी हो, तो आपको निम्न चेतावनी मिलती है: "[बाइंडबल] को किसी फ़ंक्शन पर लागू होने पर ईवेंट नाम पैरामीटर की आवश्यकता होती है जो गेटटर या सेटर नहीं है।" विवरण यह सब कुछ कहता है। चूंकि आपके पास "प्रॉपर्टी चेंज" ईवेंट नहीं है जो विशेष रूप से इस विधि के लिए ट्रिगर किया गया है, इसलिए आपको एक कस्टम स्वयं को प्रेषित करना होगा। वह है [बाइंडेबल (घटना = "customEvent")] और उसके बाद उस घटना को अपनी कक्षा में कहीं से प्रेषित करें।

+0

धन्यवाद क्रिस, यह वास्तव में उपयोगी स्पष्टीकरण है। – aaaidan