Как программно выбрать элемент в списке Flex после обновления dataProvider? - PullRequest
1 голос
/ 03 января 2011

Поскольку я немного новичок во Flex, здесь я могу упустить что-то фундаментальное. У меня есть контейнер Spark List, у которого dataProvider связан с результирующим набором, возвращаемым из вызова RemoteObject. Довольно стандартные вещи.

<s:List id="list" dataProvider="{model.stuff}" width="100%" height="100%"
        selectedIndex="@{selectedSlider.value}"
        itemRenderer="{stuffRenderer}">

</s:List>

selectedIndex связан с HSlider, но это не проблема. Моя проблема в том, что я хотел бы автоматически выбрать определенный «предпочтительный» элемент из списка (только сначала ... для руководства пользователя).

Я пытался сделать это в событии creationComplete, но мои данные еще не обнаружились ... настройка selectedIndex не сработала ... было слишком рано.

Как правильно это сделать?

Ответы [ 3 ]

2 голосов
/ 03 января 2011
private function findAllUsers_resultHandler(e:ResultEvent):void
{
    list.dataProvider = new ArrayCollection(e.result as Array);
    if(firstTry)
    {
        list.selectedIndex = 0;
        firstTry = false;
    }
}
2 голосов
/ 03 января 2011

spark.components.List имеет spark.components.SkinnableDataContainer в своей иерархии классов, которая отправляет событие dataProviderChanged при каждом изменении dataProvider.К сожалению, в SkinnableDataContainer нет метаданных [Event], позволяющих использовать это событие в MXML.Итак, вам нужно создать свой собственный пользовательский компонент, который расширяет List.

package
{
    import spark.components.List;

    [Event(name="dataProviderChanged", type="flash.events.Event")]
    public class MyList extends List
    {
        public function MyList()
        {
            super();
        }
    }
}

Используя свой пользовательский компонент, вы можете добавить прослушиватель событий для dataProviderChanged и соответственно обновить свой selectedIndex.

<ns1:MyList id="list" dataProvider="{model.stuff}" width="100%" height="100%"
        dataProviderChanged="selectedIndex = selectedSlider.value"
        selectedIndex="@{selectedSlider.value}"
        itemRenderer="{stuffRenderer}">
</ns1:MyList>

Кстати: это работает и с другими List компонентами (например, DropDownList).

1 голос
/ 03 января 2011

Я считаю, что это должно работать, если вы просто установите начальное значение ползунка в индекс, который вы хотите выбрать в начале. Примерно так:

<s:List dataProvider="{yourData}" selectedIndex="{hSlider.value}" /> <s:HSlider id="hSlider" minimum="0" maximum="{yourData.length - 1}" stepSize="1" value="theIndexYouWantAsInitial" liveDragging="true" />

Это должно работать. НТН FTQuest

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...