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

Apache flex 如何在flex4下拉列表中保留提示/虚拟项,apache-flex,drop-down-menu,flex4,prompt,Apache Flex,Drop Down Menu,Flex4,Prompt,我有一个下拉列表“选择员工”,这是可选的。我需要它在顶部有“无人”,这样用户可以更改回NoOne,如果他已经选择了“John Someone” 我的问题是如何保留提示项,或者在不更改数据提供程序的情况下在-1处添加一个伪项(我真的不喜欢在原始employeeList数据提供程序中添加“No one”) 附言:同样的问题,但仍然没有答案: 我建议通过创建一个名为“DummyArrayCollection”的类来扩展ArrayCollection类。您可以将虚拟变量存储在该类中,并将其用作数据

我有一个下拉列表“选择员工”,这是可选的。我需要它在顶部有“无人”,这样用户可以更改回NoOne,如果他已经选择了“John Someone”

我的问题是如何保留提示项,或者在不更改数据提供程序的情况下在-1处添加一个伪项(我真的不喜欢在原始employeeList数据提供程序中添加“No one”)

附言:同样的问题,但仍然没有答案:


我建议通过创建一个名为“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;
    }
}
公共类DummyArrayCollection扩展了ArrayCollection
{
private var_firstElement:String;
私有变量dummyArray:Array;
公共函数DummyArrayCollection(源:Array=null)
{
超级(来源);
_dummyArray=init(源);
_第一元素=”;
}
公共函数init(src:Array):数组{
var retArr:Array=new Array();
retArr[0]=\u firstElement;//在此处添加虚拟元素

对于(var i:int=0;i我建议通过创建一个名为“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;
    }
}
公共类DummyArrayCollection扩展了ArrayCollection
{
private var_firstElement:String;
私有变量dummyArray:Array;
公共函数DummyArrayCollection(源:Array=null)
{
超级(来源);
_dummyArray=init(源);
_第一元素=”;
}
公共函数init(src:Array):数组{
var retArr:Array=new Array();
retArr[0]=\u firstElement;//在此处添加虚拟元素

对于(var i:int=0;i,这里有一个工作的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>

杰米姆
乔伊
博博
哈里哈里
萨利萨利
;
this.personsList=新的XMLListCollection(xml.persons.person)
var myFirstNodeXML:XML=None Selectednone;
this.personsList.addItemAt(myFirstNodeXML,0);
myCB.selectedIndex=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>

杰米姆
乔伊
博博
哈里哈里
萨利萨利
;
this.personsList=新的XMLListCollection(xml.persons.person)
var myFirstNodeXML:XML=None Selectednone;
this.personsList.addItemAt(myFirstNodeXML,0);
myCB.selectedIndex=0;
}
]]> 

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

change=“{myDropDown.selectedIndex=-1}”


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

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

change=“{myDropDown.selectedIndex=-1}”


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

以防万一有人感兴趣,我刚刚发现:


以防万一有人感兴趣,我刚刚发现:


dropDownList.selectedItem=null

+1是一个很好的解决方案。为了增加额外的好处,您可以添加支持,将虚拟项索引为-1,或者添加其他为“可选集合”提供有用功能的功能(看起来无法重用“提示”)字符串,这是我首选的解决方案。因此选择了您的答案。谢谢。我在init()方法中看到了几个问题。方法中的第2行将_firstElement分配给retArr[0],即使_firstElement尚未在构造函数中初始化。此外,它随后会覆盖retArr[0]在for循环中,+1是一个好的解决方案。为了获得额外的好处,您可以添加支持,将虚拟项索引为-1,或者添加其他为“可选集合”提供有用功能的功能:)看起来不可能重用“提示”字符串,这是我首选的解决方案。因此选择了您的答案。谢谢。我在init()方法中看到了几个问题。方法中的第2行将_firstElement分配给retArr[0],即使_firstElement尚未在构造函数中初始化。此外,它随后会覆盖retArr[0]在for-loop中。谢谢,但是你更改了数据提供程序!!谢谢,但是你更改了数据提供程序!!这很好,但是我必须更改那里的代码才能正常工作。我在那里的评论中发布了我的更改。这很好,但是我必须更改那里的代码才能正常工作。我在那里的评论中发布了我的更改。