привязка данных с as3 - PullRequest
       4

привязка данных с as3

1 голос
/ 19 марта 2011

У меня есть небольшая проблема (поскольку я не привык связываться с 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>

но ComboBox создаются динамически с AS3, все работает, за исключением того, что я не могу связать второй поставщик данных ComboBox, чтобы он был XMLList в selectedItem первого ComboBox.

Ответы [ 3 ]

3 голосов
/ 19 марта 2011

Я думаю, вам нужно связывание во время выполнения.Это делается с помощью класса BindingUtils , см., Например, this .Что касается вашего случая, это должно быть что-то вроде

BindingUtils.bindProperty(secondCombobox, "dataProvider",
    firstCombobox, "selectedItem");
2 голосов
/ 19 марта 2011

Вы создаете это динамически на основе данных?Если это так, вы всегда можете использовать компонент Repeater, чтобы повторить то, что вы пытаетесь достичь.

<mx:Repeater dataProvider="{someData}">
    <mx:FormItem label="{data.label}">
        <mx:ComboBox dataProvider="{data.stateCB.selectedItem.city}"
                labelField="@name" />
    </mx:FormItem>
</mx:Repeater>
0 голосов
/ 19 марта 2011

Спасибо, это именно то, что я искал, строка кода, которая работает для меня, выглядит примерно так:

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

Однако я не смог получить доступ к "сайту" внутрифункция только "хозяин".По сути, я пытаюсь запустить второй ComboBox с selectedIndex = -1

...