Flex组合框labelfunction

时间:2011-03-14 17:49:21

标签: flex actionscript-3

我有两个关于Flex组合框的问题。

  1. 表示函数名的字符串将从xml @ run time读取。

    var combo:ComboBox = new ComboBox(); combo.labelFunction =“functionName”;

  2. 我怎样才能做到这一点?

    1. 因此,只能通过访问另一个名为person的DTO,然后访问其名字来检索要在组合框中显示的名字。

      var combo:ComboBox = new ComboBox(); combo.labelField =“person.firstName”;

    2. 我的班级看起来像这样,

      public class Test
      {
           public var person:PersonDTO;
      }
      
      public class PersonDTO
      {
           public var firstName:String;
      }
      

      是否可以使用组合框标签字段访问任何多级文本?

2 个答案:

答案 0 :(得分:2)

您需要传递函数而不是名称。 这样做

combo.labelFunction = "functionName";

传递一个字符串。

我能想到的唯一工作就是为每个函数创建一个switch语句。然后在你的xml中用“case”调用它。

switch( xml.@labelfunction ){
   case 'func1':
      combo.labelFunction = this.func1;
      break;
   case 'func2':
      combo.labelFunction = this.func2;
      break;
}

它的hacky但应该工作。

答案 1 :(得分:0)

ad 1)labelFunction

当您只知道名称为String时调用函数非常简单。以下代码段显示了如何执行属于同一个类的成员的函数。如果你需要从另一个类调用一个函数,用相应的变量名替换this

private function comboBox_labelFunction(item:Object):String
{
    var functionName:String = myXml.@labelFunctionName;
    return this[functionName](item);
}

ad 2)labelField

通常无法使用" person.firstName"作为labelField。但是,您应该可以在labelFunction中使用它。这样的事情应该有用......

private function comboBox_labelFunction(item:Object):String
{
    var labelField:String = "person.firstName";
    var attributeNames:Array = labelField.split(".");

    for each (var attributeName:String in attributeNames)
    {
        if (item && item.hasOwnProperty(attributeName))
            item = item[attributeName];
        else
            return null;
    }

    return item;
}