2011-03-19 2 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, все работает, за исключением того, что я не могу привязать второй DataProvider ComboBox к XMLList в первом выбранном элементе ComboBox.

+0

Покажите нам свой код AS3 и сообщите нам, какой подход вы пробовали и почему он не работает. – JeffryHouser

ответ

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); 

Тем не менее, я гавань 't смог получить доступ к «сайту» внутри функции, только «хозяин». В основном, я пытаюсь сделать второй запуск ComboBox с выбраннымIndex = -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> 
Смежные вопросы