如何在flex4下拉列表中保留提示/虚拟项目

时间:2011-05-05 12:37:50

标签: flex drop-down-menu flex4 prompt

我有一个下拉列表"选择一名员工"这是可选的。我需要它有#34;没有人"在顶部,以便用户可以更改回NoOne,如果他'我已经选择了#34; John Someone"。

我的问题是如何保留提示项,或者在-1处添加虚拟项而不更改数据提供者(我真的很讨厌添加"没有人"到原来的employeeList数据提供者)

P / S:同样的问题,但仍然没有答案:

5 个答案:

答案 0 :(得分:1)

我建议通过创建一个名为“DummyArrayCollection”的类来扩展ArrayCollection类。您可以将虚拟变量存储在那里,并将其用作数据提供者,而不会影响原始员工列表:

public class DummyArrayCollection extends ArrayCollection
{
    private var _firstElement:String;
    private var _dummyArray:Array;

    public function DummyArrayCollection(source:Array=null)
    {
        super(source);
        _dummyArray = init(source);
        _firstElement = "";
    }

    public function init(src:Array):Array{
        var retArr:Array = new Array();
        retArr[0] = _firstElement; //add your dummy element here
        for(var i:int=0;i<src.length;i++){
            retArr[i] = src[i];
        }
        return retArr;
    }
}

答案 1 :(得分:1)

将更改事件处理程序添加到下拉列表中:

change = "{myDropDown.selectedIndex = -1}"

这样,在选择项目后,您的提示将被重复使用。

答案 2 :(得分:1)

以防有人感兴趣我刚刚发现了这个:

Receipt

答案 3 :(得分:0)

这是一个有效的flex 3示例。我确信它可以很容易地转换为flex 4。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init( )" width="100%" layout="absolute">
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.collections.XMLListCollection;

            [Bindable]
            public var personsList:XMLListCollection;

            private function init( ):void{

                var xml:XML = 
                <root>
                    <persons>
                        <person><label>jim</label><value>jim</value></person>
                        <person><label>joe</label><value>joe</value></person>
                        <person><label>bob</label><value>bob</value></person>
                        <person><label>harry</label><value>harry</value></person>
                        <person><label>sally</label><value>sally</value></person>
                    </persons>
                </root>;

                this.personsList =  new XMLListCollection( xml.persons.person )

                var myFirstNodeXML:XML = <person><label>None Selected</label><value>none</value></person>;
                this.personsList.addItemAt(myFirstNodeXML,0);
                myCB.selectedIndex = 0;
            }

        ]]> 
    </mx:Script>
    <mx:ComboBox id="myCB" dataProvider="{this.personsList}"/>
</mx:Application>

答案 4 :(得分:0)

dropDownList.selectedItem = null