Apache flex 如何在flex4下拉列表中保留提示/虚拟项
我有一个下拉列表“选择员工”,这是可选的。我需要它在顶部有“无人”,这样用户可以更改回NoOne,如果他已经选择了“John Someone” 我的问题是如何保留提示项,或者在不更改数据提供程序的情况下在-1处添加一个伪项(我真的不喜欢在原始employeeList数据提供程序中添加“No one”) 附言:同样的问题,但仍然没有答案: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类。您可以将虚拟变量存储在该类中,并将其用作数据
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中。谢谢,但是你更改了数据提供程序!!谢谢,但是你更改了数据提供程序!!这很好,但是我必须更改那里的代码才能正常工作。我在那里的评论中发布了我的更改。这很好,但是我必须更改那里的代码才能正常工作。我在那里的评论中发布了我的更改。