2010-06-06 23 views
5

में गतिशील डेटा बाइंडिंग (बाइंडप्रॉपटी) की मूल बातें समझना मुझे रनटाइम पर बनाए गए घटकों के गुणों को गतिशील रूप से बाध्य करने की आवश्यकता है। इस विशेष मामले में कृपया मान लें कि मुझे बाइंडप्रोपर्टी का उपयोग करने की आवश्यकता है।फ्लेक्स

मुझे समझ में नहीं आता कि निम्नलिखित सरल परीक्षण विफल क्यों हो रहा है (कोड देखें)। जब मैं बटन पर क्लिक करता हूं, तो लेबल टेक्स्ट नहीं बदलता है।

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

क्या कोई मुझे समझने में मदद कर सकता है कि मुझे क्या याद आ रही है?

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="Tools.*" minWidth="684" minHeight="484" xmlns:ns2="*" creationComplete="Init();"> 
    <mx:Script> 
    <![CDATA[ 
     import mx.collections.ArrayCollection; 
     import mx.binding.utils.*; 
     public var Available:ArrayCollection=new ArrayCollection(); 

     public function get Value():String { 
     return (Available.getItemAt(0).toString()); 
     } 

     public function Init():void { 
     Available.addItemAt('Before', 0); 
     BindingUtils.bindProperty(Lab, 'text', this, 'Value'); 
     } 

     public function Test():void { 
     Available.setItemAt('After', 0); 
     } 
    ]]> 
    </mx:Script> 
    <mx:Label x="142" y="51" id="Lab"/> 
    <mx:Button x="142" y="157" label="Button" click="Test();"/> 
</mx:WindowedApplication> 

अग्रिम धन्यवाद।

उत्तर

3

जैसा कि ग्लेन ने उल्लेख किया है, आपको टैग Value पर जोड़ने की आवश्यकता है।

इसके अलावा, आपने संपत्ति के लिए एक सेटटर परिभाषित नहीं किया है। डेटा बाध्यकारी केवल तब लागू होता है जब संबंधित सेटर कहा जाता है। प्रवाह कुछ ऐसा है: आप सेटर को कॉल करते हैं - फ्लेक्स गेटर को कॉल करके डेटा अपडेट करता है।

[Bindable] 
    public function get value():String { 
    return (Available.getItemAt(0).toString()); 
    } 

    public function set value(v:String):void { 
    Available.setItemAt(v, 0); 
    } 

    public function init():void { 
    Available.addItemAt('Before', 0); 
    BindingUtils.bindProperty(Lab, 'text', this, 'Value'); 
    } 

    public function iest():void { 
    value = "After"; 
    } 

ध्यान दें कि मैं कार्य करता है और गुण के नाम बदल दिया है सामान्य सम्मेलन के अनुसार लोअरकेस। InitialCaps केवल कक्षा के नामों के लिए उपयोग किया जाता है।

+0

हां, ऐसा लगता है क्योंकि यह एक सेट विधि गायब था। मुझे एहसास नहीं हुआ कि इसकी आवश्यकता थी। – Joshua

1

मैं कभी भी बाध्यकारी उपयोग का उपयोग नहीं करता, लेकिन मेरा पहला अनुमान यह है कि आप "मूल्य" पर [बाइंडेबल] टैग खो रहे हैं।