2011-03-14 5 views
0

У меня есть два вопроса относительно комбинированного блока Flex.Flex combo box labelfunction

  1. Строка, представляющая имя функции, будет считана из xml @ run time.

    var combo: ComboBox = новый ComboBox(); combo.labelFunction = "functionName";

Как я могу это достичь?

  1. Итак, первое имя, которое будет отображаться в поле со списком, может быть получено только путем доступа к другому DTO, который называется человек, а затем его имя.

    var combo: ComboBox = новый ComboBox(); combo.labelField = "person.firstName";

Моего класс выглядит так,

public class Test 
{ 
    public var person:PersonDTO; 
} 

public class PersonDTO 
{ 
    public var firstName:String; 
} 

Можно ли получить доступ к любому тексту многоуровневого, используя поле со списком поля метка?

ответ

0

объявление 1) labelFunction

Вызов функции, когда вы знаете только название, как строка довольно легко. Следующие фрагменты показывают, как вы можете выполнять функцию, являющуюся членом одного и того же класса. Если вам нужно вызвать функцию из другого класса, замените this на соответствующее имя переменной.

private function comboBox_labelFunction(item:Object):String 
{ 
    var functionName:String = [email protected]; 
    return this[functionName](item); 
} 

объявление 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; 
} 
2

Вам необходимо передать функцию не по имени. Выполнение этого

combo.labelFunction = "functionName"; 

Проходит строку.

Единственная работа, о которой я могу думать, это сделать оператор switch с одним случаем для каждой функции, которую вы можете иметь. Затем назовите это «case» из вашего xml.

switch([email protected]){ 
    case 'func1': 
     combo.labelFunction = this.func1; 
     break; 
    case 'func2': 
     combo.labelFunction = this.func2; 
     break; 
} 

Его хакерство, но должно работать.