Flex mobile ArrayCollection错误

时间:2012-03-11 04:22:11

标签: flash flex flex4 arraycollection flex-mobile

我正在尝试开发基于移动设备的Flex应用程序。

在我的申请中,我有两种观点。

我试图将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);
}

  

错误:未知属性:'距离'。在   mx.collections ::的ListCollectionView / HTTP://www.adobe.com/2006/actionscript/flash/proxy ::的getProperty()[E:\ dev的\ 4.Y \框架\项目\框架的\ src \ MX \收藏\ ListCollectionView.as:870]     at views :: DetailDirection / init()[C:\ Documents and   设置\ ARSENAL \ Adob​​e Flash Builder   浏览器中的4.6 \ CityExplorer_v2.0 \ src \ views \ DetailDirection.mxml:21] :: DetailDirection / ___ DetailDirection_View1_creationComplete()[C:\ Documents   和设置\ ARSENAL \ Adob​​e 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 \框架\项目\框架\ SRC \ MX \核心\ UIComponent.as:13152]     在mx.core :: UIComponent / set   初始化()[E:\ dev的\ 4.Y \框架\项目\框架\ SRC \ MX \核心\ UIComponent.as:1818]     在   mx.managers ::的LayoutManager / doPhasedInstantiation()[E:\ dev的\ 4.Y \框架\项目\框架\ SRC \ MX \管理者\ LayoutManager.as:842]     在   mx.managers ::的LayoutManager / doPhasedInstantiationCallback()[E:\ dev的\ 4.Y \框架\项目\框架\ SRC \ MX \管理者\ LayoutManager.as:1180]


导致此错误的原因是什么?需要做什么?

我在这里缺少什么?

由于

2 个答案:

答案 0 :(得分:0)

距离不是ArrayCollection上的文档属性,这就是它抛出错误的原因。

data属性通常是通用对象;当直接访问属性时,Flex编译器通常不会抛出编译错误。

您可能想要访问ArrayCollection中的项目;像这样的东西:

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

答案 1 :(得分: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);

    }

}