2009-09-02 9 views
1

J'ai beaucoup d'objets Flex comme celui-ci:Dans Flex3, quel type est une propriété d'objet?

public class MyData { 
    public var time: Date; 
    public var label: String; 
} 

Je peuplant cet objet d'un enregistrement DB récupéré via le protocole AMF qui ressemble à ceci:

{ 
    label: "Label", 
    incident: "2009-08-15 11:12:14.12233" 
} 

Je veux écrire une valeur générique mapper pour ces objets que, étant donné un objet cible (instance de MyData ici) et un enregistrement d'entrée, sera capable de dire que MyData.time est un champ Date et effectuer le mappage de type automatiquement. Quelque chose comme ceci:

function map(obj, targetType): * { 
    var newInstance: * = new targetType(); 
    for (var property: String in obj) { 
     if (getPropertyType(targetType, property) == Date) { 
      newInstance[property] = parseDate(obj[property]); 
     } 
     else { 
      newInstance[property] = obj[property]; 
     } 
    } 
} 

function getPropertyType(type_var: Class, property: String): Class { 
    // .. this is what I have no idea how to do 
} 

Quelqu'un peut-il remplir le vide ici?

Répondre

3

Vous avez peut-être besoin de quelque chose comme describeType. Et peut-être avez-vous besoin d'utiliser getDefinitionByName() si vous voulez créer un objet réel. Donc quelque chose comme ça pour le contenu de votre fonction:

var typeXml:XML = describeType(type_var[property]); 
return getDefinitionByName(typeXml.type[0][email protected]); 

Je ne l'ai pas compilé. Il suffit de le jeter là pour voir si ça aide.

+0

Merci, c'est exactement ce dont j'avais besoin! –

0

Vous pouvez utiliser l'opérateur 'is' pour vérifier le type d'un objet.

The is operator

function map(obj, targetType): * { 
    var newInstance: * = new targetType(); 
    for (var property: String in obj) { 
    if (obj[property] is Date) { 
     newInstance[property] = parseDate(obj[property]); 
    } 
    else { 
     newInstance[property] = obj[property]; 
    } 
    } 
} 

HTH

Koen

+0

Est-ce que cela fonctionne si obj [propriété] n'est pas définie? –

+0

L'utilisation de l'opérateur 'is' sur une propriété non définie retournera toujours false –

+0

Ensuite, malheureusement, ce n'est pas la réponse que je recherche. –

-1

Si vous devez mapper une variable d'objet à une classe variable MyData vous pouvez effectuer les opérations suivantes

public class MyData 
{ 
    public var time: Date; 
    public var label: String; 

    function map(obj:Object):void 
    { 
     for (var property: String in obj) 
     { 
      this[property] = obj[property]; 
     } 
    } 
} 

Note: L'objet obj doit contenir les propriétés exactes "time" et "label".

Espérons qu'il résout votre problème

Questions connexes