【问题标题】:Flex mobile ArrayCollection ErrorFlex 移动 ArrayCollection 错误
【发布时间】:2012-03-11 04:22:11
【问题描述】:

我正在尝试开发基于移动的弹性应用程序。

在我的应用程序中,我有两个视图。

我正在尝试将 ArrayCollection 作为数据从一个视图传递到另一个视图,但是在尝试访问第二个视图上的 ArrayCollection 时,我遇到了错误..

这是来自 firstView.mxml 的代码:

dirSteps 是我试图传递给下一个视图的数组集合...

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\frameworks\projects\framework\src\mx\collections \ListCollectionView.as:870] 在views::DetailDirection/init()[C:\Documents and 设置\ARSENAL\Adobe Flash Builder 4.6\CityExplorer_v2.0\src\views\DetailDirection.mxml:21] 在views::DetailDirection/___DetailDirection_View1_creationComplete()[C:\Documents 和设置\ARSENAL\Adobe Flash Builder 4.6\CityExplorer_v2.0\src\views\DetailDirection.mxml:6] 在 flash.events::EventDispatcher/dispatchEventFunction() 在 flash.events::EventDispatcher/dispatchEvent() 在 mx.core::UIComponent/dispatchEvent()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:13152] 在 mx.core::UIComponent/set 初始化()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:1818] 在 mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:842] 在 mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1180]


是什么导致了这个错误?需要做什么?

我在这里缺少什么?

谢谢

【问题讨论】:

    标签: flash apache-flex flex4 arraycollection flex-mobile


    【解决方案1】:

    距离不是 ArrayCollection 上的记录属性,这就是它引发错误的原因。

    数据属性通常是一个通用对象;并且 Flex 编译器在直接访问属性时通常不会引发编译错误。

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

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

    【讨论】:

    • 这里的MyObjectType 是什么?您说的是哪种类型的对象?
    • ^ 谢谢。你的解决方案奏效了。但是,当我尝试在第二个视图中存储 data 的值时,像这样 ..private var arr:ArrayCollection = new ArrayCollection(ArrayUtil.toArray(data)); 然后尝试以 ..((arr as ArrayCollection).getItemAt(0) as MyObjectType).distance 的身份访问 .. 它仍然给我带来与“距离属性未知”相同的错误...
    • @tomjerry "MyObjectType" 将是 dataProvider 中对象的对象类型。当你像这样初始化 ArrayCollection 时,它被设置一次;可能在设置数据属性之前。当您尝试访问这些值以查看问题所在时,您必须逐步执行代码。 ArrayCollection 是否有效?您尝试访问的项目是否存在于 ArrayCollection 中?是否正确投射?最后,它有距离属性吗?
    【解决方案2】:

    这里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);
    
        }
    
    }
    

    【讨论】:

    • 您的解决方案仅在尝试在同一视图中访问 arraycollection 时才有效。但我想将该 arraycollection 传递给 secondview 并访问它。因此,在这种情况下,您的解决方案可能不起作用。
    • 我只是展示了如何访问添加到 ArrayCollection 中的对象。你必须给出索引。
    • 是的,但是如果我试图从第二个视图访问它,如何访问它?
    猜你喜欢
    • 2010-12-16
    • 2011-12-25
    • 1970-01-01
    • 2023-04-03
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多