2009-03-17 3 views
4

Ich versuche, eine Erfassungsklasse in Flex zu erstellen, die auf die Aufnahme eines bestimmten Datentyps beschränkt ist, den ich verwende (eine Schnittstelle). Ich habe beschlossen, die ArrayCollection-Klasse nicht zu erweitern, da sie zu allgemein ist und mir nicht wirklich die Sicherheit bei der Kompilierung gibt, nach der ich suche. In seiner vereinfachten Form enthält meine Sammlung ein Array und ich verwalte, wie Objekte hinzugefügt und entfernt werden usw.Erstellen von typsicheren Sammlungen in Flex

Was ich wirklich tun möchte, ist diese Sammlungen für jede Schleifen zu verwenden. Es scheint definitiv nicht so einfach zu sein wie C#, wo Sie IEnumerable und IEnumerator implementieren (oder einfach die generische Collection verwenden). Gibt es eine Möglichkeit, dies in Aktionsskript zu tun, und wenn ja, Infos darüber, wie es erreicht wird?

Prost

Antwort

2

Sie müssen die Flash Proxy-Klasse erweitern. Mit Extending Proxy können Sie ändern, wie "get" und "set" funktionieren, sowie "for..in" und "for..each" -Schleifen. Sie können weitere Details on the Livedocs.

Hier ist ein Beispiel für das Problem finden:

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

süß ... genau das, was ich suchte, Prost an euch beide –

2

Werfen Sie einen Blick auf Vector<>. Das ist so gut wie möglich für eine typisierte Sammlung in Flex (ab 4). Sie müssen jedoch andernfalls eine eigene Klasse implementieren. Ein Weg, so scheint es, ist die Verwendung der .

Schauen Sie sich auch this SO Post.

+0

Ja, ich bin Programmierung für Flash 9, so kann ich nicht das Vector-Objekt verwenden. Es muss eine Möglichkeit geben, eine Art Iteratormuster in Flex zu implementieren, da die ListCollectionView-Klassen für jede Schleife verwendet werden können. –

+0

Sieh dir Brian Heylins Antwort auf seine eigene Frage an. – dirkgently

+0

Auch, Vector. <> Ist in Flex 3 verfügbar, solange Sie Flash 10 zielen. –

Verwandte Themen