【发布时间】:2010-04-16 05:35:30
【问题描述】:
观察下面的 Flex 程序(我使用的是带有 3.5 SDK 的 Flex Builder 3)。第二个组合框以第一个为条件。如果选择了“名字”,那么您可以选择“姓氏”。如果选择“无”,则不允许您选择姓氏,而是提示您选择名字。
要查看标签消失的神秘问题,请运行此程序并选择一个名字。然后选择一个姓氏。一切都很好。然后在第一个组合框中选择“无”。第二个组合框的提示变回,姓氏被删除。一切都还好。然后尝试再次选择名字和姓氏。您会看到,在选择了名字后,姓氏并没有出现,尽管它们的空格会出现(如果您调试程序,正确的数据会出现在 dataprovider 中)。
这个“虫子”整天都在杀死我。我在其中实现此行为的项目要复杂得多,但此示例基本上说明了正在发生的事情。这是 Flex 中的错误,还是我做错了什么?
谢谢!
<?xml version="1.0" encoding="utf-8"?>
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var cbCompanyDP:ArrayCollection = new ArrayCollection( [ { firstName: "None", data: 0 },
{ firstName: "Bob", data: 1 },
{ firstName: "Bart", data: 2 } ] );
[Bindable]
public var cbEmployeeDP:ArrayCollection = new ArrayCollection();
public var employees:ArrayCollection = new ArrayCollection( [ { lastName: "Smith" },
{ lastName: "Smyth" },
{ lastName: "Smick" },
{ lastName: "Smack" } ] );
[Bindable]
public var prompt:String = "Choose First Name first";
public function cbFirstNameChange( value:int ):void
{
if ( value == 0 )
{
employees.removeAll();
setEmpDP( employees );
prompt = "Choose First Name first";
}
else
{
setEmployees();
setEmpDP( employees );
prompt = "Now choose Last Name";
}
}
private function setEmpDP( ac:ArrayCollection ):void
{
cbEmployeeDP = ac;
}
private function setEmployees():void
{
employees = new ArrayCollection( [ { lastName: "Smith" },
{ lastName: "Smyth" },
{ lastName: "Smick" },
{ lastName: "Smack" } ] );
}
]]>
</mx:Script>
<mx:HBox>
<mx:ComboBox dataProvider="{cbCompanyDP}"
id="cbFirstName"
labelField="firstName"
width="200"
change="cbFirstNameChange(cbFirstName.selectedItem.data)"
prompt="Choose a first Name" />
<mx:ComboBox dataProvider="{cbEmployeeDP}"
id="cbLastName"
labelField="lastName"
width="200"
prompt="{prompt}" />
</mx:HBox>
【问题讨论】:
-
老兄!我试过你的 pgm,它在 ma 机器上没有显示这样的问题!!!
-
这令人沮丧。您使用的是什么版本的 Flex SDK?哪个版本的 Flash Player?
标签: apache-flex flex3