2011-09-26 61 views
0

我在从下拉列表中拾取自定义数据类型时遇到问题。为了使这一点尽可能容易理解,我将用一个简单的例子来说明我想要做的事从下拉列表中拾取自定义对象

所以说我有一个自定义的数据类型(说的类型狗)。狗包含名称,品种和年龄。我将一个狗的每个实例存储在一个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类。

现在我想从下拉列表中选择某只狗。我试图这样做:

var theDog : Dog; 
theDog = dogSelected.selectedItem; 

但是,ActionScript似乎并不喜欢这样。现在,我仔细阅读并发现使用标签字段是能够选择这种方式的方式。我一直无法选择的狗的项目,所以后来我可以把它绑定到:

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

会有人能够帮助我能够选择从下拉此对象吗?非常感谢提前。

另外需要注意的是,ArrayCollection是动态生成的。在我的实际应用程序中,我试图弄清楚这一点,我的自定义数据数组是动态的。没有任何硬编码

回答

0

要访问下拉的selectedItem;您必须将其转换为您想要的类型:

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

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

+0

事实上,'selectedItem'被声明为'*',所以不需要被转换。 –

+0

这个伎俩。我在代码中投射了问题。非常感谢你。你和丹尼尔一直很棒。感谢您的快速和简洁的回应:) –

+0

@George Vasels因为这回答你的问题,一定要点击问题旁边的复选框来标记它。 – JeffryHouser

0

你试过了吗?

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


或无型铸造

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

如果不工作,然后发布您的错误代码。