【问题标题】:Casting result.event into an ArrayCollection of Person (Class) in Flex在 Flex 中将 result.event 转换为 Person (Class) 的 ArrayCollection
【发布时间】:2012-10-19 01:46:10
【问题描述】:

我对 Flex 环境有点陌生,我想知道如何处理这个场景:

我的初始代码是这样的:

public function displayAllNames(event:ResultEvent):void {

    var result:ArrayCollection  = new ArrayCollection();

    result = event.result as ArrayCollection;

   if (result.length != 0){
       listBox.dataProvider = result;
   }
}

event.result 是具有 name 属性的 Person 类的 ArrayCollection

listBox 是 Fl​​ex 中要显示名称的 List 组件的 id

当我尝试运行代码时,列表框确实显示了一些东西。但它没有显示名称,而是始终显示 object Object。看来我仍然必须先对 event.result 做一些事情,这样它才能成为 Person 类的 ArrayCollection。

【问题讨论】:

    标签: java apache-flex arraycollection resultevent


    【解决方案1】:

    你需要设置你的ComboBox的labelField,试试这个

    假设 Person 有一个可见的 name 属性,

    public class Person(){
       public var name:String = "User 1";
    }
    

    您可以通过 labelField 属性告诉您的 ListBox 使用该属性来填充其标签字段

    if (result.length != 0){
       listBox.labelField = "name";
       listBox.dataProvider = result;
    }
    

    我相信默认设置为"label",如果找不到该属性,它将使用Object.toString(),这就是[Object object]的来源。

    因此,它还可以在您的数据提供者类中覆盖或简单地包含 toString 方法,而不更改列表的 labelField

    overide pubic function toString():String{
        return "this will become your label field";
    }
    

    【讨论】:

    • listBox.labelField = "name"; 是什么意思?它有什么作用?
    • 它告诉列表框使用集合对象上的名称属性作为标签字段
    • 谢谢。我试过了,但它仍然在做同样的事情。它仍在 listBox 上显示 [object Object]。
    • 您能否添加更多代码,包括 Object 类以及它是如何添加到您的数组集合中的。
    最近更新 更多