2011-03-14 5 views
0

J'ai deux questions concernant la combo box Flex.Labelfunction Flex combo box

  1. La chaîne représentant le nom de la fonction sera lue à partir de xml @ run time.

    var combo: ComboBox = nouveau ComboBox(); combo.labelFunction = "nomFonction";

Comment puis-je y parvenir?

  1. Ainsi, le premier nom, qui doit être affiché dans la zone de liste déroulante, ne peut être que récupéré par l'accès à une autre DTO, personne appelée et son prénom.

    var combo: ComboBox = nouveau ComboBox(); combo.labelField = "person.firstName";

Ma classe ressemble à ceci,

public class Test 
{ 
    public var person:PersonDTO; 
} 

public class PersonDTO 
{ 
    public var firstName:String; 
} 

Est-il possible d'accéder à un texte à plusieurs niveaux en utilisant le champ de l'étiquette de zone de liste déroulante?

Répondre

0

ad 1) labelFunction

Appel de fonctions lorsque vous ne connaissez que le nom comme chaîne est assez facile. Les extraits suivants montrent comment vous pouvez exécuter une fonction membre de la même classe. Si vous devez appeler une fonction d'une autre classe, remplacez this par le nom de la variable correspondante.

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

ad 2) labelField

Il est normalement impossible d'utiliser "person.firstName" comme labelField. Cependant, vous devriez pouvoir l'utiliser dans votre labelFunction. Quelque chose comme ça devrait fonctionner ...

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

Vous devez transmettre la fonction et non le nom. Faire ce

combo.labelFunction = "functionName"; 

passe une chaîne.

Le seul travail que je peux penser est de faire une déclaration de commutateur avec un cas pour chaque fonction que vous pourriez avoir. Ensuite, appelez cela avec "cas" à partir de votre xml.

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

Son hacky mais devrait fonctionner.