MyComponent.mxml:
<?xml version="1.0"?>
<mx:Canvas ... >
<fx:Script>
[Bindable]
public var headingText:String = "Default Heading Text";
</fx:Script>
<s:VGroup>
<s:Label text="{headingText}" ... />
(INSTANCE MXML)
</s:VGroup>
<mx:Image ... />
</mx:Canvas>
दूँगी कि तुम इस तरह headingText में पारित:
<my:MyComponent headingText="Custom Heading Text" />
आप अन्य सरल मूल्यों आप में पास करना चाहते हैं के लिए एक ही दृष्टिकोण का पालन कर सकते हैं; बस एक सार्वजनिक संपत्ति घोषित करें, इसे बाध्य करने योग्य बनाएं, फिर अपने घटक के भीतर, संपत्ति को अपने गंतव्य (या गंतव्यों) में हुक करने के लिए डेटा बाइंडिंग का उपयोग करें।
आप जटिल गुणों (जैसे आपके इंस्टॉलेशन एमएक्सएमएल) के लिए भी वही कर सकते हैं। यह इस तरह दिखता है, जब आप इसे का उपयोग करें:
<my:MyComponent>
<my:thePropertyName>
<s:Label text="whatever..." ... />
<(OTHER MXML CONTENT) />
</my:thePropertyName>
<my:someOtherPropertyName>
....
</my:someOtherPropertyName>
</my:MyComponent>
यह कैसे लागू करने के लिए, आप यह पता spark.components.Group
घटक के mxmlContent
संपत्ति फ्लेक्स ढांचे में जाँच कर सकते हैं का एक उदाहरण के लिए। यहां पोस्ट करने के लिए स्रोत बहुत लंबा है, और मुझे सीधे स्रोत पर ऑनलाइन लिंक नहीं मिल रहा है; लेकिन मूल विचार यह है (आप सभी एक MXML फ़ाइल में एक <fx:Script>
ब्लॉक के अंदर निम्न कर सकते हैं - आप ऐसा करने के क्रम में एक शुद्ध वर्ग के रूप में बनाने की जरूरत नहीं है):
[1] घोषित उस प्रकार को इंगित करने के लिए मेटाडाटा ArrayElementType
के साथ Array
टाइप करें, जिस प्रकार आप सरणी रखना चाहते हैं।
[ArrayElementType("mx.core.IVisualElement")]
public function set mxmlContent(value:Array):void {
_mxmlContent = value;
}
private var _mxmlContent:Array;
[2] आप कार्यावधि में सरणी पर पाश करने के लिए तर्क का एक छोटा सा की जरूरत है, और घटक के प्रदर्शन की सूची पर सरणी की सामग्री को जोड़ देंगे। createChildren
ओवरराइड इसे ट्रिगर करने के लिए एक अच्छी जगह है। निम्नलिखित setMXMLContent()
स्पार्क Group
की विधि के कार्यान्वयन से कम से कम व्युत्पन्न किया गया है। यह सब संभव मामलों को कवर नहीं करता है, लेकिन यह आप मिल शुरू कर दिया जाएगा:
:
override protected function createChildren():void {
super.createChildren();
if(_mxmlContent == null) return;
for (i = 0; i < _mxmlContent.length; i++) {
var elt:IVisualElement = _mxmlContent[i];
addElement(elt);
}
}
तो अब अपने घटक एक संपत्ति mxmlContent
कहा जाता है, जो आप सिंटैक्स का उपयोग एक माता पिता MXML घटक से सेट कर सकते हैं के लिए होता है
<my:MyComponent>
<my:mxmlContent>
... (MXML ELEMENTS HERE) ...
</my:mxmlContent>
</my:MyComponent>
मेटाडाटा: [DefaultProperty("mxmlContent")]
आपके घटक वर्ग को लागू करके आप अपनी नई संपत्ति default property
में अपने घटक बना सकते हैं। एमएक्सएमएल से ऐसा करने के लिए, बस मेटाडेटा परिभाषा को <fx:Metadata>
तत्व में लपेटें। see here for example of fx:Metadata।
सभी को एक साथ ऊपर डाल दिया, और आप कुछ आप इस तरह उपयोग कर सकते हैं मिल जाएगा:
<my:MyComponent headingText="Custom Text Here">
(CUSTOM MXML CONTENT HERE)
</my:MyComponent>
संपादित करें:
: मैं नोटों की एक जोड़ी यहाँ बनाना चाहिए
"हेलो" घटक (जैसे mx:Canvas
)का समर्थन नहीं करते हैंऊपर इस्तेमाल किए गए अनुसार, तो आप शायद इसके बजाय addChild()
का उपयोग करना चाहेंगे।
आपको (शायद) हेलो घटकों के बजाय स्पार्क घटकों का उपयोग करना चाहिए। मतलब, <s:Group>
का उपयोग <mx:Canvas>
के बजाय अपने आधार के रूप में करें। यदि आप ऐसा करते हैं, तो आपका घटक ऊपर वर्णित mxmlContent
संपत्ति का उत्तराधिकारी होगा। यदि आप चाहते हैं कि आपके घटक की अपनी "सामग्री" संपत्ति (या यहां तक कि एकाधिक सामग्री गुण) हो, तो बस उन्हें कुछ अलग नाम दें।
ठीक है, यह वास्तव में एक * संकलन-समय * समाधान नहीं है, लेकिन हो सकता है कि रन-टाइम प्रोसेसिंग से बचा जा सके। आप निश्चित रूप से बहुत धन्यवाद के लायक हैं और चूंकि कोई और करीब नहीं आया है, इसलिए मैं इस जवाब को स्वीकार करूंगा। – W3Coder
@ डब्ल्यू 3 कोडर: स्वीकार करने के लिए धन्यवाद। मुझे पता है कि आप एक संकलन समय समाधान चाहते थे, लेकिन - अपने कोड जनरेटर के निर्माण के शॉर्ट - वहां पहुंचने का कोई रास्ता नहीं है। हालांकि इसके लायक होने के लिए: यह वही दृष्टिकोण है जो कि बाल सामग्री से निपटने के लिए फ्लेक्स फ्रेमवर्क द्वारा उपयोग किया जाता है, इसलिए इस तरह से लिखे गए आपके घटकों को उतना ही कुशल होना चाहिए जितना कि संकलन-समय समाधान होगा। सौभाग्य! कृपया वापस आएं और अगर आपको वहां कोई अलग/बेहतर समाधान मिल जाए तो हमें बताएं। – Lee