2009-03-17 6 views
4

Je tente de créer une classe de collection dans Flex limitée à l'hébergement d'un type spécifique de données que j'utilise (une interface). J'ai choisi de ne pas étendre la classe ArrayCollection car elle est trop générique et ne me donne pas vraiment le temps de compilation que je suis après. Dans sa forme simpliste, ma collection contient un tableau et je gère la façon dont les objets sont ajoutés et supprimés, etc.Création de collections Sécuritaires de type dans Flex

Ce que je veux vraiment faire, c'est utiliser ces collections pour chaque boucle. Il ne semble pas aussi simple que C# où vous implémentez simplement IEnumerable et IEnumerator (ou simplement en utilisant la collection générique). Existe-t-il un moyen de le faire dans le script d'action et si oui, des informations sur la façon dont il est réalisé?

Vive

Répondre

2

Vous devez étendre la classe de proxy Flash. Proxy extensible vous permet de modifier le fonctionnement de 'get' et 'set', ainsi que les boucles 'for..in' et 'for..each'. Vous pouvez trouver plus de détails on the Livedocs.

Voici un exemple pour votre question:

package 
{ 
    import flash.utils.Proxy; 
    import flash.utils.flash_proxy; 

    public class EnumerableColl extends Proxy 
    { 
     private var _coll:Array; 

     public function EnumerableColl() 
     { 
      super(); 
      _coll = [ 'test1', 'test2', 'test3' ]; 
     } 

     override flash_proxy function nextNameIndex(index:int):int 
     { 
      if (index >= _coll.length) return 0; 
      return index + 1; 
     } 


     override flash_proxy function nextValue(index:int):* 
     { 
      return _coll[ index - 1]; 
     } 

    } 
} 
+0

doux ... juste ce que je cherchais, vous encourage tous les deux –

2

Jetez un oeil à Vector<>. C'est à peu près tout ce que vous pouvez faire pour une collection typée dans Flex (4 et suivants). Cependant, vous devrez implémenter votre propre classe sinon. Une façon, semble-t-il, est d'utiliser le Iterator Pattern.

En outre, jetez un oeil à this SO post.

+0

Ouais je suis pour le flash 9 programmant donc je ne peux pas utiliser l'objet Vector. Il doit y avoir un moyen d'implémenter une sorte de modèle d'itérateur dans flex car les classes ListCollectionView peuvent être utilisées pour chaque boucle. –

+0

Bien sûr, jetez un oeil à la réponse de Brian Heylin à sa propre question. – dirkgently

+0

Aussi, Vector. <> Est disponible en Flex 3 aussi longtemps que vous ciblez Flash 10. –

Questions connexes