2011-03-19 60 views
1

我有一個有點問題(因爲我不習慣用AS3結合),事情是,我想要做這樣的數據綁定:數據與AS3結合

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="vertical" 
    verticalAlign="middle" 
    backgroundColor="white"> 

<mx:XML id="dp" source="countries_states_cities.xml" format="e4x" /> 

<mx:Form> 
    <mx:FormItem label="Country:"> 
     <mx:ComboBox id="countryCB" 
       dataProvider="{dp.country}" 
       labelField="@name" /> 
    </mx:FormItem> 
    <mx:FormItem label="State:"> 
     <mx:ComboBox id="stateCB" 
       dataProvider="{countryCB.selectedItem.state}" 
       labelField="@name" /> 
    </mx:FormItem> 
    <mx:FormItem label="City:"> 
     <mx:ComboBox id="cityCB" 
       dataProvider="{stateCB.selectedItem.city}" 
       labelField="@name" /> 
    </mx:FormItem> 
</mx:Form> 

但ComboBoxes是使用AS3動態創建的,除了我不能綁定第二個ComboBox dataProvider作爲第一個ComboBox的selectedItem中的XMLList之外,一切正常。

+0

向我們展示您的AS3代碼,並告訴我們您嘗試過的方法以及它爲什麼不起作用。 – JeffryHouser 2011-03-19 17:01:18

回答

3

我想你需要運行時綁定。它用BindingUtils類完成,例如參見this。至於你的情況下,它必須是像

BindingUtils.bindProperty(secondCombobox, "dataProvider", 
    firstCombobox, "selectedItem"); 
0

感謝,這正是我一直在尋找,代碼行,對我的工作原理是這樣的:

BindingUtils.bindProperty(comboBox, 'dataProvider', parentCB, {name: 'selectedItem', getter: function (host:ComboBox):XMLList { 
           var dp:XMLList; 
           if (host.selectedIndex >= 0) dp = host.selectedItem.children(); 
           else dp = new XMLList(); 
           return dp; 
          }}, true); 

然而,我的天堂無法訪問功能內的「網站」,只能訪問「主機」。基本上我想要做的是使第二個組合框以selectedIndex開始= -1

2

您是否基於數據動態創建它?如果是這樣,你總是可以使用Repeater組件重複你想要完成的事情。

<mx:Repeater dataProvider="{someData}"> 
    <mx:FormItem label="{data.label}"> 
     <mx:ComboBox dataProvider="{data.stateCB.selectedItem.city}" 
       labelField="@name" /> 
    </mx:FormItem> 
</mx:Repeater>