Как сделать содержимое списка зависимым от выбора в другом списке во Flex? - PullRequest
1 голос
/ 07 июля 2011

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

Я создал несколько ArrayCollections, имена которых установлены в значения «data» первого раскрывающегося списка, например:

[Bindable]
public var countries:ArrayCollection = new ArrayCollection([
                {label:"USA",data:"USA"}, 
                {label:"Canada",data:"Canada"},  ]);

[Bindable]
public var USA:ArrayCollection = new ArrayCollection([
                {label:"state1",data:"state1"}, 
                {label:"state2",data:"state2"}, 
                {label:"state3",data:"state3"}, ]);

[Bindable]
public var Canada:ArrayCollection = new ArrayCollection([
                {label:"statea",data:"statea"}, 
                {label:"state2b",data:"stateb"}, 
                {label:"statec",data:"statec"}, ]);

[Bindable]
public var Italy:ArrayCollection = new ArrayCollection([
                {label:"statex",data:"statex"}, 
                {label:"statey",data:"statey"}, 
                {label:"statez",data:"statez"}, ]);

, и список реализован так:1007 *

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

Ответы [ 2 ]

2 голосов
/ 07 июля 2011

Вместо этого вы можете изменить свои данные, чтобы они были вложенными, например:

    [Bindable]
    public var countries:ArrayCollection = new ArrayCollection([
            {label:"USA", data:             // country
                new ArrayCollection([       // its states, nested
                    {label:"state1",data:"state1"}, 
                    {label:"state2",data:"state2"}, 
                    {label:"state3",data:"state3"} 
                ])
            },
            {label:"Canada",data:           // country
                new ArrayCollection([       // its states, nested
                    {label:"state1",data:"state1"}, 
                    {label:"state2",data:"state2"}, 
                    {label:"state3",data:"state3"} 
                ])            
            }
            ]);

Затем просто свяжите выбранный элемент, как у вас:

<mx:FormItem label="State:" color="black" required="true">
    <s:DropDownList id="state" prompt="Select State" 
        dataProvider="{country.selectedItem.data}">
    </s:DropDownList>
</mx:FormItem>
1 голос
/ 07 июля 2011

Прослушайте событие изменения первого выпадающего списка и сделайте что-то вроде этого:

state.dataProvider = this[country.selectedItem.data]

Ключевое слово 'this' относится к текущему компоненту, и при использовании синтаксиса скобок будет использоваться строковое значение в dataProvider состояния для доступа к переменной в компоненте.

...