2012-03-11 2 views
0

J'essaie de développer une application flexible mobile.Flex mobile ArrayCollection Erreur

Dans mon application, j'ai deux vues.

Je suis en train de passer le ArrayCollection en tant que données d'une vue à une autre vue, mais en essayant d'accéder ArrayCollection sur la deuxième vue, je reçois une erreur ..

est ici le code de firstView.mxml:

dirSteps est le ArrayCollection que je suis en train de passer à la vue suivante ...

for (var r:Number = 0 ; r < directions.numRoutes; r++) { 
        var route:Route = directions.getRoute(r); 

        if (r >= 0 || r < (numRoutes - 1)) { 
         var midMarker:Marker = new Marker(route.endLatLng); 
         map.addOverlay(midMarker); 
        } 
        var numSteps:uint = route.numSteps; 
        for (var s:Number = 0 ; s < numSteps ; s++) { 
         var step:Step = route.getStep(s); 
         dirSteps.addItem({Step: (s+1), Description: step.descriptionHtml, Distance: step.distanceHtml, LatLng: step.latLng}); 
        } 
       } 
       dirSteps.refresh(); 
} 


..... some more code ... 
navigator.pushView(DetailDirection,dirSteps); 

code de DetailDirection.mxml:

[Bindable] 
private var directionList:ArrayCollection; 

private function init():void { 
    directionList = new ArrayCollection(ArrayUtil.toArray(data)); 

    // here, data should be my arraycollection, but throws above error on 
    // trying to access property (i.e Step, Distance etc ..) of ArrayCollection ... 
    trace(data.Distance); 
} 

Error: Unknown Property: 'Distance'. at mx.collections::ListCollectionView/http://www.adobe.com/2006/actionscript/flash/proxy::getProperty()[E:\dev\4.y\frameworks\projects\framework\src\mx\collections\ListCollectionView.as:870] at views::DetailDirection/init()[C:\Documents and Settings\ARSENAL\Adobe Flash Builder 4.6\CityExplorer_v2.0\src\views\DetailDirection.mxml:21] at views::DetailDirection/___DetailDirection_View1_creationComplete()[C:\Documents and Settings\ARSENAL\Adobe Flash Builder 4.6\CityExplorer_v2.0\src\views\DetailDirection.mxml:6] at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at mx.core::UIComponent/dispatchEvent()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:13152] at mx.core::UIComponent/set initialized()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:1818] at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:842] at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1180]


Quelle est la cause de cette erreur? Ce qui doit être fait ?

Tout ce qui me manque ici?

Merci

Répondre

0

La distance est pas une propriété documentée sur une ArrayCollection qui est la raison pour laquelle il renvoie une erreur.

la propriété data est généralement un objet générique; et le compilateur Flex ne génère généralement pas d'erreurs de compilation lors de l'accès direct aux propriétés.

Vous souhaitez probablement accéder à un élément dans ArrayCollection; quelque chose comme ceci:

((data as ArrayCollection).getItemAt(0) as MyObjectType).distance 
+0

Qu'est-ce 'MyObjectType' ici ? De quel type d'objet parlez-vous? – tomjerry

+0

^Merci. Votre soln travaillé. Mais, quand j'essaye de stocker la valeur de 'données' dans ma deuxième vue, comme ceci .. ' private var arr: ArrayCollection = nouveau ArrayCollection (ArrayUtil.toArray (data)); 'et essayez alors d'accéder en tant que .. '((arr comme ArrayCollection) .getItemAt (0) comme MyObjectType) .distance' .. il me jette encore la même erreur que" distance propriété inconnue "... – tomjerry

+0

@tomjerry" MyObjectType "serait le type d'objet de les objets dans votre dataProvider. Lorsque vous initialisez le ArrayCollection comme cela, il est défini une fois; peut-être avant que la propriété data soit définie.Vous devrez parcourir le code lorsque vous essaierez d'accéder aux valeurs pour voir ce qui ne va pas. La collection ArrayCollection est-elle valide? L'article auquel vous essayez d'accéder existe-t-il dans ArrayCollection? Est-il lancé correctement? Et enfin, a-t-il une propriété à distance? – JeffryHouser

0

ici data est un ArrayCollection. Donc, vous ne pouvez pas accéder directement data.Distance

data[index] vous donnera l'objet, si data[index].Distance

par exemple:

var data:ArrayCollection = new ArrayCollection(); 

data.addItem({name:"jack", distance:300}); 
data.addItem({name:"jill", distance:400}); 

trace(data[1].distance); // prints 400 

Dans votre cas boucle d'utilisation

private function init():void { 

    for(var i:int = 0; i < data.length; i++){ 

     var item:Object = data[i]; 
     trace(item.Distance); 

    } 

} 
+0

Votre requête ne fonctionne que si vous essayez d'accéder à arraycollection dans la même vue. Mais je veux passer cette collection de tableaux à secondview et y accéder. Ainsi, votre soln pourrait ne pas fonctionner dans ce cas. – tomjerry

+0

Je montre juste comment accéder aux objets ajoutés à un ArrayCollection. Vous devez donner l'index. – Diode

+0

Oui, mais comment accéder si j'essaye d'y accéder à partir de la 2ème vue? – tomjerry