我目前正在尝试使用FlexGlobals的新方法来访问我正在开发的移动应用程序的默认视图上的ArrayCollection。下面是在默认视图中构成该数组的创建和填充的代码,该代码在应用程序启动后立即发生:
private var ids:ArrayCollection = new ArrayCollection();
private function loop():void
{
var index:int;
for( index = 0; index < compsCollection.length; index++ )
{
trace( "Element " + index + " is " + compsCollection[index].comp_id );
trace( ids.length);
ids.addItem(compsCollection[index].comp_id);
}
}
现在,当运行此代码时,我可以从控制台清楚地看到正在正确填充“ids”ArrayCollection。现在,在应用程序中的不同视图中,我想访问此数据并将其用于各种事物。我使用下面的代码尝试访问ArrayCollection的数据:
protected var ids_list:ArrayCollection = new ArrayCollection();
protected function view1_viewActivateHandler(event:ViewNavigatorEvent):void
{
var obj:Object = FlexGlobals.topLevelApplication.parameters;
ids_list.source = obj.ids;
trace(ids_list.length);
}
当我尝试这个时,我没有收到错误,但Trace语句返回“0”。所以我也试过了:
protected function view1_viewActivateHandler(event:ViewNavigatorEvent):void
{
ids_list.source = FlexGlobals.topLevelApplication.parameters.ids;
trace(ids_list.length);
}
在trace语句中又返回“0”。我终于尝试了这个以确定它是否可行:
protected function view1_viewActivateHandler(event:ViewNavigatorEvent):void
{
ids_list.source = FlexGlobals.topLevelApplication.ids;
trace(ids_list.length);
}
当我尝试这个并导航到这个代码将被启动的视图时,我遇到了这个错误:
Error #1069: Property ids not found on Main and there is no default value.
我只能假设我在默认视图中创建的ArrayCollection在离开它时没有任何价值。有没有人可以帮助我这个,因为似乎没有关于如何使用FlexGlobals做这些类型的事情的文档?谢谢
答案 0 :(得分:1)
您无法访问私有财产,请尝试
/*
Replace
private var ids:ArrayCollection = new ArrayCollection();
by
*/
private var _ids:ArrayCollection = new ArrayCollection();
public set ids(value:ArrayCollection):void{
_ids = value;
}
public get ids():ArrayCollection{
return _ids
}
答案 1 :(得分:0)
对于子组件来说,了解其父/祖先的结构是非常糟糕的做法。话虽这么说,你无法看到Application的成员变量值的原因是因为你把它变成了私有的。如果您希望它在自己的范围之外可见,则需要将其公开。
答案 2 :(得分:0)
将ArrayCollection作为属性从主应用程序传递给视图。