试图使用FlexGlobals访问ArrayCollection?

时间:2011-08-30 10:40:20

标签: android flex

我目前正在尝试使用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做这些类型的事情的文档?谢谢

3 个答案:

答案 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作为属性从主应用程序传递给视图。