我有两个关于Flex组合框的问题。
表示函数名的字符串将从xml @ run time读取。
var combo:ComboBox = new ComboBox(); combo.labelFunction =“functionName”;
我怎样才能做到这一点?
因此,只能通过访问另一个名为person的DTO,然后访问其名字来检索要在组合框中显示的名字。
var combo:ComboBox = new ComboBox(); combo.labelField =“person.firstName”;
我的班级看起来像这样,
public class Test
{
public var person:PersonDTO;
}
public class PersonDTO
{
public var firstName:String;
}
是否可以使用组合框标签字段访问任何多级文本?
答案 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;
}