Выберите значение DropDownList с помощью сценария действий в Flex 4

Я уверен, что это легко, но я некоторое время искал, как выбрать элемент DropDownList с помощью actionscript. В этом сценарии я хотел бы указать selectedItem на основе ddlLabel или ddlData.

<?xml version="1.0" encoding="utf-8"?>

<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        import mx.events.FlexEvent;

        [Bindable]
        protected var timezonesArray:ArrayCollection = new ArrayCollection([
            {ddlLabel:"Eastern Time", ddlData:"EST"}, 
            {ddlLabel:"Central Time", ddlData:"CST"}, 
            {ddlLabel:"Mountain Time", ddlData:"MST"}, 
            {ddlLabel:"Pacific Time", ddlData:"PST"}
        ]);

        protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void
        {
            // I'm looking to select an element via actionscript here, based on ddlLabel or ddlData
        }

    ]]>
</fx:Script>

<mx:Form>
    <s:DropDownList id="ddlTimezones" dataProvider="{timezonesArray}" labelField="ddlLabel"/>
</mx:Form>


person Jivago    schedule 08.03.2011    source источник


Ответы (1)


Есть несколько способов сделать это — если вам нужно сделать это, используя метку или значение, вы можете зациклиться на коллекции массивов следующим образом:

protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void
{
    var searchTerm:String = "EST";
    var result:* = null;
    for each(var zone:* in timeZonesArray)
    {
        if(searchTerm == zone.ddlData)
        {
            result = zone;
            break;
        }
    }
    ddlTimezones.selectedItem = result;
}

Однако, если вы сохраняете ссылку на часовые пояса по отдельности или получаете их из какой-либо другой части приложения, вы можете сделать это более аккуратно:

import mx.collections.ArrayCollection;
import mx.events.FlexEvent;


var EST:Object = {ddlLabel:"Eastern Time", ddlData:"EST"};
var CST:Object = {ddlLabel:"Central Time", ddlData:"CST"};
var MST:Object = {ddlLabel:"Mountain Time", ddlData:"MST"};
var PST:Object = {ddlLabel:"Pacific Time", ddlData:"PST"};

[Bindable]
protected var timezonesArray:ArrayCollection = new ArrayCollection([
    EST, 
    CST, 
    MST, 
    PST
]);

protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void
{
    ddlTimezones.selectedItem = EST;
}

Таким образом, вам не нужно беспокоиться о том, чтобы опрашивать каждый объект в списке, потому что вы остаетесь на уровне целых объектов, а не достигаете их. Это также упрощает задачу, если вы хотите заменить список объектов в стиле JSON определением класса, если вам нужно хранить более сложную информацию о часовых поясах.

person Dan Monego    schedule 08.03.2011
comment
Мне нравится это второе решение. +1. :) - person Jason Towne; 08.03.2011
comment
Да, большое спасибо, превратить каждую часть ArrayCollection в отдельные объекты просто блестяще. это расширяет возможности во многих отношениях. ЕЩЕ РАЗ СПАСИБО! :-) - person Jivago; 08.03.2011
comment
@ Джейсон Таун, спасибо за напоминание. Я новичок на этом форуме. Очень нравится как работает :-) - person Jivago; 09.03.2011