我正在尝试开发基于移动设备的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 \ Adobe Flash Builder 浏览器中的4.6 \ CityExplorer_v2.0 \ src \ views \ DetailDirection.mxml:21] :: DetailDirection / ___ DetailDirection_View1_creationComplete()[C:\ Documents 和设置\ 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 \框架\项目\框架\ 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]
导致此错误的原因是什么?需要做什么?
我在这里缺少什么?
由于
答案 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);
}
}