{lang: 'de'}
Flashhilfe.de - Flash Community

Zugriff auf ArrayCollection-Elemente? [Flash 10]

 


AntwortenRegistrieren Seite1  

Christian Scholz#1
Benutzerbild von Christian Scholz
Beiträge: 42
Wohnort: Hamburg
Registriert: Sep 2006

28.04.2010, 14:36

Ich versuche (bisher erfolglos), auf bestimmte Elemente innerhalb einer ArrayCollection zuzugreifen, die per HTTPService-Call mit einer XML-Datei gefüllt wurde. Das an sich ist problematisch, allerdings versuche ich auch vergeblich, eine eigene Komponente, die u.a. eine Spark List-Komponente enthält, mit Teilen der ArrayCollection zu füllen.

Mein Ziel ist es eigentlich, je eine Instanz meiner Komponente (die ein Label und eine List enthält) pro Kategorie in meiner XML-Datei zu erzeugen und alle Links einer Kategorie als Liste innerhalb meiner Komponente darzustellen. Pro category-Knoten eine Instanz meiner Komponente zu erhalten, klappt. Was nicht hinhaut, ist eben das Zuweisen der jeweiligen links-Knoten zur jeweiligen List innerhalb meiner Komponente.

Noch dazu: Mein FlashBuilder4-Wissen beschränkt sich so ziemlich auf das, was durch die "Flex in a week"-Tutorials abgedeckt wird. Ich bin also ein Neuling auf diesem Gebiet.

Vielleicht hat jemand einen Tipp, wieso die gefetteten Zeilen unten Probleme bereiten und wie ich die Probleme umgehen kann?


Meine XML-Datei (Auszug) ist so aufgebaut:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<categories>
   <category>
      <name>Suchmaschinen</name>
      <links>
         <link>
            <url></url>
            <name>Yahoo</name>
         </link>
         <link>
            <url></url>
            <name>Google</name>
         </link>
      </links>
   </category>
   <category>
      <name>Lesestoff</name>
      <links>
         <link>
            <url></url>
            <name>Heise</name>
         </link>
         <link>
            <url></url>
            <name>Stern</name>
         </link>
         <link>
            <url></url>
            <name>Spiegel</name>
         </link>
      </links>
   </category>
</categories>


Meine Application sieht so aus:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
           xmlns:s="library://ns.adobe.com/flex/spark"
           xmlns:mx="library://ns.adobe.com/flex/mx"
           creationComplete="loadData.send();" xmlns:flinkcrmcategoriesservice="services.flinkcrmcategoriesservice.*">
   <fx:Script>
      <![CDATA[   
         import mx.collections.ArrayCollection;
         import mx.controls.Alert;
         import mx.rpc.events.FaultEvent;
         import mx.rpc.events.ResultEvent;
         
         public var i:uint;
         public var categories:ArrayCollection = new ArrayCollection;

         protected function loadData_resultHandler(event:ResultEvent):void
         {
            categories    = event.result.categories.category;
            trace(categories[0].links[0]["name"]); // ##### geht nicht #####
            init();
         }

         protected function loadData_faultHandler(event:FaultEvent):void
         {
            Alert.show(event.fault.faultString, "Fault Information");
         }
               
         public function init():void {
            for   (i=0;i<categories.length;i++) {
               var c:FlinkCRMCategory = new FlinkCRMCategory;
               c.x = i*200;
               c.catlabel = String(categories[i]["name"]);
               //c.linksdp = categories[i]["links"]; // ##### geht nicht #####
               // onClick -> open url in a browser window
               c.addEventListener(MouseEvent.CLICK, clickHandler);
               
               con.addChild(c);
            }
         }
      ]]>
      
   </fx:Script>
   <fx:Declarations>
      
      <s:HTTPService id="loadData"
                 url="flinkData.xml"
                 result="loadData_resultHandler(event)"
                 fault="loadData_faultHandler(event)"/>
      
   </fx:Declarations>
   
   
      <mx:Tile id="con"
             paddingLeft="10" paddingRight="10" paddingTop="10" paddingBottom="10"
             width="80%" height="100%"
             tileHeight="220"
             backgroundColor="#eeeeee"
             direction="horizontal"/>

</s:Application>


Meine Komponente:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
       xmlns:s="library://ns.adobe.com/flex/spark"
       xmlns:mx="library://ns.adobe.com/flex/mx" width="200" height="230"
       contentBackgroundColor="#DDDDDD">
   <fx:Script>
      <![CDATA[
         import mx.collections.ArrayCollection;
         
         [Bindable]
         public var catlabel:String;
         [Bindable]
         public var linksdp:ArrayCollection;
         
      ]]>
   </fx:Script>
   <fx:Declarations>
      <!-- Place non-visual elements (e.g., services, value objects) here -->
   </fx:Declarations>
   <s:Label id="catLabel"
          x="0" y="0"
          text="{catlabel}"
          width="200" height="20"
          textAlign="center" verticalAlign="middle"
          backgroundColor="#999999" color="#FFFFFF"
          fontWeight="bold"/>
   <s:List id="catLinks"
         x="0" y="20"
         width="200" height="200" 
         borderVisible="true"
         fontSize="10" fontFamily="Verdana"
         contentBackgroundColor="#FFFFFF" borderColor="#DDDDDD"
         dataProvider="{linksdp}"/>
</s:Group>
Geändert von Christian Scholz am 28.04.10 um 14:40 Uhr
springer#2
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

28.04.2010, 15:03