Flex 4:Dynamic ComboBox / List问题[object Object_Type],即使已定义labelField

时间:2010-04-21 11:05:24

标签: xml dynamic combobox flex4

我使用调用XML文件的HTTPservice动态填充ComboBox。这一切都可以通过Flash Build 4界面实现。以下是ComboBox代码:

 <s:ComboBox id="cbSockOptions" change="cbSockOptions_changeHandler(event)" 
    selectedIndex="1" 
    enabled="true" 
    creationComplete="cbSockOptions_creationCompleteHandler(event)" 
    labelField="Symbol">
       <s:AsyncListView list="{TypeUtility.convertToCollection(Operation1Result2.lastResult.Company)}"/>
 </s:ComboBox>

如上所述,上面是填充ComboBox的代码。我想从ComboBox中检索seleted值,但是当我这样做时,我得到以下输出(例如,当在Label中显示时):

  

[object Company_Type]

我目前正在使用以下代码来检索ComboBox的值

cbSockOptions.selectedItem;

我在这个主题上所做的所有阅读都说我必须在我的ComboBox中指定一个'labelField',我这样做。但是,我仍然将[object Company_Type]视为输出,而不是实际值。

帮助! :(

2 个答案:

答案 0 :(得分:1)

labelfunction属性仅适用于在ComboBox中显示值。 ComboBox有一个selectedLabel属性,但它没有标记为可绑定。如果要在其他地方使用selectedItem,则必须直接访问属性。

从简单到复杂,你可以尝试

<s:Label text="{ cbSockOptions.selectedItem[cbSockOptions.labelField] }" />

但是我认为如果你因为数组访问器而这样做,你会得到绑定警告 - 并且永远不会引起警告。

更好的想法是将selectedItem转换为与TypeUtility.convertToCollection创建的集合中的项目相同的类型,例如。

<s:Label text="{ CompanyClassName( cbSockOptions.selectedItem ).propertyToDisplay }" />

最好的想法是使用cbSockOptions_changeHandler设置一个用于绑定的局部变量(例如selectedCompany)。如果您的类是Bindable,那么您可以使用selectedCompany

<s:Label text="{ selectedCompany.propertyToDisplay }" />

否则,如果该类不可绑定,那么您可以使用另一个属性来存储值

<s:Label text="{ propertyToDisplay }" />

答案 1 :(得分:1)

发布此信息可帮助有类似问题的人。我的火花列表上有一个[object Object]问题,他们会显示使用静态数据,但不是从服务器中提取的动态集合。经过无数次的挫折,我开始摆弄。我使用自定义皮肤和项目渲染,所以我使用标准火花列表,它工作。我将自定义项目渲染添加到标准火花列表,并再次获得[对象对象]。所以我确定问题出在我的自定义项目渲染上。

解决方案...... 默认情况下,Flash Builder 4使基本项目渲染器从“{data}”对象中获取字符串信息。只需将其更改为项呈示器中的“{label}”,即可将labelFunction与复杂对象和自定义外观一起使用。