मेरे पास एक कस्टम फ्लेक्स 4+ घटक है जिसे मैं कस्टम संपत्ति में बदलावों के बारे में जागरूक होने और बनाने के लिए प्रयास कर रहा हूं। यह संपत्ति बटन (और कुछ अन्य दृश्य परिवर्तन) पर ग्राफिक निर्धारित करेगी लेकिन डेटा लगातार बदल जाएगा क्योंकि इसे टाइमर द्वारा अपडेट किया जाएगा।फ्लेक्स 4 कस्टम घटक - संपत्ति परिवर्तन की त्वचा को कैसे सूचित किया जाए?
मैंने अनकही उदाहरणों को देखा है और अभी भी वाक्यविन्यास को सही करने में असमर्थ हैं या यह पता चलता है कि चीजों को कैसे अलग किया जाना चाहिए। मैंने बिना सफलता के प्रतिबद्धताप्रॉपर्टीज और PropertyChangeEvent को ओवरराइड करना देखा है। तो मेरे पास दो प्रश्न हैं।
1) जब मैं बदलता हूं तो एक बाध्य संपत्ति के बारे में अधिसूचित होने के लिए मुझे त्वचा कैसे मिल सकती है?
2) यदि घटक की बाध्य संपत्ति के लिए डेटा एक वस्तु है, तो ऑब्जेक्ट की कोई संपत्ति बदलती है (या प्रत्येक संपत्ति को अलग से पारित करना बेहतर होगा)?
यहां मैं जो हासिल करने की कोशिश कर रहा हूं उसका एक संक्षिप्त उदाहरण है।
घटक इस तरह दिखता है:
<s:ButtonBase xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
<![CDATA[
private var _iconData:String;
[Bindable]
public function get iconData():String
{
return _iconData;
}
public function set iconData(value:String):void
{
_iconData = value;
}
]]>
</fx:Script>
मैं इसे इस तरह फोन कर रहा हूँ:
<components:MyButton id="myButton" iconData="{myData.curIconTag}" skinClass="skins.MyButtonSkin" />
मुझे लगता है मैं लोड हो रहा है हो सकता है विभिन्न छवियों के एक बहुत है और इसलिए मैं मैं राज्यों की संख्या से डरता हूं (अप/डाउन/ओवर/अक्षम, आदि के संयोजन के साथ हाथ से बाहर हो सकता है ताकि SetIconDisplay आइकन सेट कर रहा हो, लेकिन असली कुंजी यह है कि मेरे पास उस फ़ंक्शन में अन्य कोड है जब आइकनडेटा संपत्ति प्रत्येक X मिनट या उससे भी अधिक में बदलती है तो इसे निष्पादित करने की आवश्यकता होती है।
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:fb="http://ns.adobe.com/flashbuilder/2009"
creationComplete="init()">
<fx:Metadata>
[HostComponent("components.MyButton")]
</fx:Metadata>
<s:states>
<s:State name="default" />
<s:State name="down"/>
<s:State name="up"/>
<s:State name="over"/>
<s:State name="disabled" />
</s:states>
<fx:Script>
<![CDATA[
import components.MyButton;
[Embed(source="images/image1.png")]
private var icon1:Class;
[Embed(source="images/image2.png")]
private var icon2:Class;
[Embed(source="images/image3.png")]
private var icon3:Class;
[Bindable]
public var hostComponent:MyButton;
[Bindable]
private var iconClass:Class;
private function init():void
{
iconClass = new Class();
}
// how do I get this called when the iconData property on my custom component is changed?
private function SetIconDisplay():void
{
switch (hostComponent.iconData)
{
case "apple":
iconClass=icon1;
break;
case "orange":
iconClass=icon2;
break;
case "grape":
iconClass=icon3;
break;
}
}
]]>
</fx:Script>
<s:BitmapImage source="{iconClass}" x="0" y="0" width="180" height="108"/>
फिर, चिंता मत करो कैसे त्वचा वास्तव में क्या कर रहा है यह क्या रूप में है कि शायद बदल (राज्यों का उपयोग नहीं) होगा क्या कर रहा है के बारे में के रूप में ज्यादा: तो त्वचा कुछ इस तरह है। मैं बस यह समझने की कोशिश कर रहा हूं कि बाध्य संपत्ति बदलते समय एक विशिष्ट कार्य को कैसे कॉल करें।
धन्यवाद!
SparkSkin कोड पर एक नज़र डालें और आप पाएंगे कि hostComponent SparkSkin का हिस्सा नहीं है। मेरा मानना है कि संपत्ति मेजबान घटक मेटाडेटा के आधार पर संकलन समय पर बनाई गई है। यह समझ में आता है क्योंकि सभी एमएक्सएमएल की खाल स्पार्कस्किन का विस्तार करती हैं और त्वचा को यह जानने का कोई तरीका नहीं है कि मेजबान की संपत्ति तर्क प्रकार क्या होना चाहिए। एक एक्शनस्क्रिप्ट में केवल त्वचा में आपको मेजबान कॉम्पोनेंट गुण मैन्युअल रूप से बनाना होगा। – JeffryHouser