2009-04-29 16 views
7

ठीक है मेरे पास कॉम्बोबॉक्स है, डेटाप्रोवाइडर लेबल गुणों वाले ऑब्जेक्ट्स की एक सरणी है जो कॉम्बोबॉक्स विकल्पों की सूची देता है।फ्लेक्स: क्या कॉम्बोबॉक्स के चयनित इटैम को एक चर से बांधने का कोई तरीका है?

क्या कोई तरीका है कि मेरे पास MySelectedItem जैसे चर हो सकते हैं, और कॉम्बोबॉक्स के चयनित इटैम को बांध सकते हैं ताकि अगर यह बदल जाए, तो कॉम्बोबॉक्स का चयनित इटैम जो कुछ भी बदल जाएगा?

मुझे उम्मीद है कि यह समझ में आता है।

धन्यवाद!

उत्तर

16

हां, कॉम्बोबॉक्स का चयनित इटिम संपत्ति बाध्यकारी है।

वह कुछ इस तरह जाना होगा:

<mx:ComboBox selectedItem="{mySelectedItem}"> 
</mx:ComboBox> 

अपने रूप में: mySelectedItem को

[Bindable] 
var mySelectedItem:Object; 

परिवर्तन ComboBox में दिखाई देने लगेगा। यदि आप MySelectedItem द्वारा संदर्भित आइटम कॉम्बोबॉक्स के डेटा प्रदाता में मौजूद नहीं हैं, तो आपको त्रुटियां मिल सकती हैं। यह नियंत्रण अद्यतन करेगा

<mx:ComboBox id="myComboBox" 
    dataProvider="{myDataProvider}" 
    selectedItem="{defaultItem}"/> 

आप defaultItem सेट करते हैं डेटा प्रदाता की एक वस्तु के लिए (यह है [Bindable] सुनिश्चित कर लें),:

2

Change ईवेंट के लिए इवेंट श्रोता का उपयोग करें और वहां अपनी प्रसंस्करण करें।

// update a label item's text with that of the Combobox's selectedItem 
private function changeEvt(event:Event):void { 
    label.text =event.currentTarget.selectedItem.label + " " + 
} 
9

सतह पर, यह के रूप में सरल है।

लेकिन इस दृष्टिकोण के साथ समस्याएं हैं। जब तक currentDefaultItem हमेशा मेरेडेटाप्रोवाइडर के बाद बदलता नहीं है, डेटाप्रोइडर के लिए बाध्यकारी चयन को पूर्ववत कर सकता है, डिफ़ॉल्ट पर वापस लौटा सकता है (सूची में पहला आइटम)।

इसके आस-पास एक तरीका है ITem को डेटा के बाद रिबाउंड करने के लिए मजबूर करना है, डेटा सहित, चयनित इटैम प्रदान करने वाले कॉल में प्रदाता।

<mx:ComboBox id="myComboBox" 
    dataProvider="{myDataProvider}" 
    selectedItem="{getSelectedItem(myComboBox.dataProvider, defaultItem)}"/> 

यह क्या करता है यह सुनिश्चित SelectedItem पलटाव हो जाएगा जब या तो currentDefaultItem परिवर्तन, या dataProvider परिवर्तन के बाद। मुझे अपने अन्य समाधानों में दिलचस्पी होगी।

1

मुझे पता है कि यह दस्तावेज़ में वर्णित है। चयनित इटैम में बदलाव के रूप में परिवर्तन श्रोता को आग लग जाएगी। हालांकि मेरे लिए, ऐसा नहीं होता है। किसी और को एक ही व्यवहार का सामना करना पड़ता है?

+0

मैं इसे SelectedIndex साथ ध्यान दिया है - यह स्यूडोकोड (क्षमा करें, मैचों की पहचान ऑब्जेक्ट प्रकार पर निर्भर करता है) है। – Panzercrisis

1

या आप इस तरह कुछ कर सकता है अगर आप विस्तार ComboBox कोई आपत्ति नहीं है; लेकिन आप अंदाजा हो ...

public class IndexRetainingComboBox extends ComboBox 
{ 
    public function IndexRetainingComboBox() 
    { 
     super(); 
    } 

    override public function set dataProvider(value:Object):void 
    { 
     var originalSelection:Object = this.selectedItem; 
     super.dataProvider = value; 
     var newIdx:uint = [find originalSelection idx in combobox or return 0 ] 
     this.selectedIndex = newIdx; 
    } 
} 
संबंधित मुद्दे