从下拉列表中提取自定义对象

时间:2011-09-26 23:49:37

标签: flash actionscript-3 flex drop-down-menu label

我遇到从下拉列表中选择自定义数据类型的问题。为了使其尽可能易于理解,我将使用一个简单的例子来说明我想做的事情

所以说我有自定义数据类型(Say类型的狗)。狗包含名称,品种和年龄。我将狗的每个实例存储在ArrayCollection中:

[Bindable]
private var dogData : ArrayCollection;

此ArrayCollection包含具有相应信息的1..N Dog对象。现在有一个下拉状态:

<s:DropDownList x="81" y="178" id="dogSelected" prompt="Dog Selected:" dataProvider="{dogData}" labelField="dogNameData"  />

dogNameData假设来自一个自定义ActionScript类,该类在该对象中具有Dog的“name”字段。

现在我想从下拉菜单中选择一只狗。我试着这样做:

var theDog : Dog;
theDog = dogSelected.selectedItem;

但是,ActionScript似乎不喜欢这样。现在,我阅读并发现使用标签字段是能够选择它的方法。我无法选择狗项目,因此我可以将其绑定到:

var selectedDogBreed : String;
//var theDog : Dog = the selected object from my drop down
selectedDogBreed = theDog.breed

是否有人能够帮助我从下拉列表中选择此对象?非常感谢提前。

另外需要注意的是,ArrayCollection是动态生成的。在我的实际应用程序中,我试图解决这个问题,我的自定义数据数组是动态的。没有什么是硬编码的

2 个答案:

答案 0 :(得分:0)

访问下拉菜单的selectedItem;你必须把它当作你想要的类型:

var theDog : Dog;
theDog = dogSelected.selectedItem as Dog

labelfield与访问selectedItem无关。 labelField仅由默认的itemRenderer用于决定在下拉列表中显示的值。如果您没有看到下拉菜单中显示的任何文字;或者看到[object object]或类似的东西,那就是labelField发挥作用的地方。

答案 1 :(得分:0)

你试过吗?

trace( 'name ' + (dogData[dogSelected.selectedIndex] as Dog).name )


或没有类型铸造

trace( 'name ' + dogSelected.selectedItem.name )

如果这不起作用,请发布您的错误代码。