2012-03-11 4 views
0

Я пытаюсь разработать мобильное приложение flex.Flex Mobile ArrayCollection Error

В моем приложении у меня есть два вида.

Я пытаюсь передать ArrayCollection как данные от одного вида к другой точке зрения, но при попытке получить доступ ArrayCollection на второй взгляд, я получаю сообщение об ошибке ..

Вот код из firstView.mxml:

dirSteps является ArrayCollection, что я пытаюсь перейти к следующему представлению ...

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); 

код из 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]


Что вызывает эту ошибку? Что должно быть сделано ?

Все, что мне не хватает здесь?

Благодаря

ответ

0

Расстояние не документированы свойство на ArrayCollection, поэтому он выдает ошибку.

свойство данных обычно является общим объектом; и компилятор Flex вообще не бросает ошибки компиляции при доступе к свойствам непосредственно против него.

Возможно, вы хотите получить доступ к элементу в ArrayCollection; что-то вроде этого:

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

Что такое 'MyObjectType' Вот ? Какой тип объекта вы говорите? – tomjerry

+0

^спасибо. Твой сон работал. Но, когда я пытаюсь сохранить значение 'data' в моем втором представлении, вот так: ' private var arr: ArrayCollection = new ArrayCollection (ArrayUtil.toArray (data)) ;, а затем попытаться получить доступ как .. '((arr as ArrayCollection) .getItemAt (0) как MyObjectType) .distance' .. он по-прежнему бросает мне ту же ошибку, что и« свойство расстояния неизвестно »... – tomjerry

+0

@tomjerry« MyObjectType »будет типом объекта объекты в вашем dataProvider. Когда вы инициализируете ArrayCollection таким образом, он устанавливается один раз; возможно, до того, как будет установлено свойство данных.Вам нужно будет пройти код при попытке получить доступ к значениям, чтобы узнать, что не так. Является ли массив ArrayCollection действительным? Доступен ли элемент, который вы пытаетесь получить доступ, в ArrayCollection? Правильно ли он отображается? И, наконец, имеет ли это свойство расстояния? – JeffryHouser

0

здесь data является ArrayCollection. Таким образом, вы не можете получить прямой доступ data.Distance

data[index] даст вам объект, так data[index].Distance

например:

var data:ArrayCollection = new ArrayCollection(); 

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

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

В вашем случае использования цикла

private function init():void { 

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

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

    } 

} 
+0

Ваш soln работает только при попытке доступа к arraycollection в том же представлении. Но я хочу передать этот arraycollection для второго взгляда и получить к нему доступ. Таким образом, ваш soln может не работать в этом случае. – tomjerry

+0

Я просто показываю, как получить доступ к объектам, добавленным в ArrayCollection. Вы должны указать индекс. – Diode

+0

Да, но как получить доступ, если я пытаюсь получить к нему доступ со второго представления? – tomjerry