2011-09-22 10 views
7

फ्लेक्स फ्रेमवर्क की एमएक्सएमएल भाषा घटकों के लिए एक कन्स्ट्रक्टर का समर्थन क्यों नहीं करती है या घटकों के लिए कन्स्ट्रक्टर तर्क स्वीकार करती है? जहां तक ​​मुझे कन्स्ट्रक्टर तर्क लेने पर एमएक्सएमएल में एक्शनस्क्रिप्ट ऑब्जेक्ट घोषित करना संभव नहीं है। मैं कारण के बारे में उत्सुक हूँ। क्या यह एडोब द्वारा डिज़ाइन पसंद है या घोषणात्मक भाषाएं कैसे काम करती हैं? उदाहरण के लिए, क्यों की अनुमति नहीं:mxml समर्थन घटक कन्स्ट्रक्टर क्यों नहीं करता है?

<myNameSpace:MyComponent constructor="{argArray}"/> 
+0

शायद यह मदद मिलेगी: http://stackoverflow.com/questions/878043/how-do-i-populate-required-parameters-in-a-custom-mxml-tag –

+0

धन्यवाद क्रिस अविश्वसनीय रूप से के लिए तेज़ उत्तर! मैं एक कारण की तलाश कर रहा था कि यह कामकाज के बजाय क्यों संभव नहीं है - क्या ऐसा कुछ ऐसा है जो आम तौर पर घोषणात्मक भाषाओं में संभव नहीं है और क्यों? –

+0

और आप एक से अधिक तर्क कैसे घोषित करेंगे? हमेशा उन्हें एक सरणी में रखें? –

उत्तर

6

आप अपने प्रश्न के बारे में अधिक जानकारी के लिए IMXMLObject मदद एपीआई पढ़ सकते हैं। वे बिल्कुल नहीं कह रहे हैं कि एमएक्सएमएल कन्स्ट्रक्टर का समर्थन क्यों नहीं करता है, लेकिन यह कहता है कि आपको अपने जीवन चक्र घटनाओं के माध्यम से अपने एमएक्सएमएल घटक को नियंत्रित करना होगा: प्रारंभ करना, प्रारंभ करना और निर्माण पूर्ण करना।

मुझे लगता है कि यह एक डिज़ाइन निर्णय है, क्योंकि एमएक्सएमएल सीधे एएस 3 कोड में अनुवादित हो जाता है (आप अपने एप्लिकेशन को संकलित-क्रिया-क्रियालेख = सही जोड़कर संकलित कर सकते हैं और देखें कि यह क्या उत्पन्न करता है)।

4

भले ही कक्षा को एमएक्सएमएल में परिभाषित किया गया हो, फिर भी एक उदाहरण चर को तुरंत चालू करने के माध्यम से एक कन्स्ट्रक्टर को कार्यान्वित करना संभव है। इसे "preinitialize" या "createComplete" जैसी विभिन्न घटनाओं से पहले कॉल किया जाएगा।

<myNameSpace:MyComponent> 
    <fx:Script> 
    <![CDATA[ 
    private var ignored:* = myInstanceConstructor(); 

    private function myInstanceConstructor():* { 
     // Do something - called once per instance 
     return null; 
    } 
    ]]> 
    </fx:Script> 
</myNameSpace:MyComponent> 

इसके अलावा, कक्षा चर को निम्नानुसार उसी तरह शुरू किया जा सकता है।

<myNameSpace:MyComponent> 
    <fx:Script> 
    <![CDATA[ 
    private static var ignored:* = myClassConstructor(); 

    private static function myClassConstructor():* { 
     // Do something - called once per class 
     return null; 
    } 
    ]]> 
    </fx:Script> 
</myNameSpace:MyComponent> 
+0

उत्तर के लिए बहुत बहुत धन्यवाद, एक बहुत ही उपयोगी दृष्टिकोण की तरह लगता है। इसे आज़माएं –

+0

मैं इसे 'निजी कॉन्स __new __(): * = निर्माण();' न केवल वाक्य रचनात्मक चीनी के लिए बदल दूंगा, बल्कि क्योंकि यह अपरिवर्तनीय होना चाहिए। मैं विरासत के लिए 'निर्माण() *' फ़ंक्शन 'संरक्षित' भी बनाउंगा। –

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

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