2012-05-26 19 views
0

我使用的火花組合框爲XMLListCollection,通過此鏈接AS3:如何使用ActionScript3訪問XMLListCollection中的數據?

http://blog.shortfusion.com/index.cfm/2009/4/15/FlexAS3-Custom-ComboBox-for-Countries-with-XML

的的XMLListCollection在這裏定義的啓發:

public class ComboBox_Country extends ComboBox { 

    private var Country:XML=new XML(
     <countries> 
     <country code="US" iso="840" label="United States" /> 
     <country code="CA" iso="124" label="Canada" /> 
     <country code="GB" iso="826" label="United Kingdom" /> 
        .... 
     <country code="ZM" iso="894" label="Zambia" /> 
     <country code="ZW" iso="716" label="Zimbabwe" /> 
     </countries>); 

    public function ComboBox_Country() { 
     dataProvider = new XMLListCollection(Country.children()); 
     labelField = '@label'; 
    } 

,並呼籲在MXML爲:

<mycomp:ComboBox_Country id="countryComboBox" width="100%"/> 

當用戶進行選擇時,我可以從countryComboBox.selectedIndex獲得索引。但是,我需要該國家的字符串,我不確定如何從XMLListCollection中提取該字符串。當我看到在調試器中我看到:

enter image description here

比方說,用戶選擇指數2(例如英國)。我需要鍵入調試器才能返回United Kingdom?我試過這樣的東西:

countryComboBox.Country.getItemAt(2) 
countryComboBox.Country.getItemAt(2).label 
countryComboBox.Country[2] 
countryComboBox.Country.label.getItemAt(2) 
etc... 

無濟於事。

回答

1

組合框有哪些你應該使用屬性selectedItem屬性。在這種情況下,selectedItem將是XML對象。閱讀如何從XML對象獲取數據here。 你的情況,你可以使用

[email protected] 
+0

感謝borisgolovnev,當我嘗試它返回:'XMLList(@ 121f5cf11)'在調試器中。 – ggkmath

+1

爲什麼在調試器中需要這個標籤?我現在試過了,是的,它在調試器中顯示爲XML,但是如果我跟蹤它(),它會返回一個國家/地區名稱。這是因爲@和其他XML遍歷方法實際上是您必須調用才能獲取數據的方法。調試器不這樣做。 – borisgolovnev

+0

我只是使用調試器作爲工具來幫助找出正確的語法來返回選定的標籤。但是,是的,你是對的,如果我跟蹤你上面顯示的代碼,它確實提供了正確的結果。謝謝!!! – ggkmath

1

我不能完全確保正確填充組合框,通常你會使用一個數據提供者(見http://help.adobe.com/en_US/flex/using/WS70f0d54f063b9b081aac8d1d1247252e4a0-8000.html

假設是正確顯示數據給你,那麼你很接近

// Should give you the country object selected 
var obj:Object = countryComboBox.selectedItem; 

// You should also be able to use .code or .iso 
return obj.label; 

如果obj.label不工作,你可以嘗試obj['label'];

+0

正如borisgolovnev解釋,調試器不能調用所需的XML遍歷方法返回的數據得到的標籤,所以我試圖使用跟蹤此解決方案也是如此。我發現你需要在上面添加一個'@'前綴,所以跟蹤命令是:trace(obj。@ label);''trace(obj ['@ label']);'非常感謝! – ggkmath