在ViewNavigatorApplication中获取对ActionScript类中的View的引用

时间:2011-11-28 13:43:12

标签: actionscript-3 flex flex4.5

我在FlashBuilder 4.5中有一个非常简单的项目。它是ViewNavigatorApplication类型的移动应用程序,具有单一视图MapView。在MapView.mxml文件中,我有一个在xml中声明的Map类型的Flex组件。

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" name="CatBusMapView">

    <fx:Script>
            <![CDATA[
                import com.esri.ags.Map;
                        ....
                    ]]>
    </fx:Script>

    <fx:Declarations>
     ....
    </fx:Declarations>

    <esri:Map id="cbm">
        ...
    </esri:Map>
</s:View>

在同一个项目中,我有一个名为UserGeolocation的动作脚本。在本课程中,我尝试获取对此地图组件的引用。

到目前为止,我可以获得对顶级应用程序,ViewNavigator和ViewNavigator的NavigationStack的引用。但是,我找不到访问MapView的方法,更不用说我在其中声明的地图。

我知道像firstView()和activeView()这样的方法,但我想要一个绝对的解决方案,无论是第一个还是活动的,它都会检索视图。我试过navigator.getChildByName(&#34; MapView&#34;)没有运气。

2 个答案:

答案 0 :(得分:1)

您也可以使用活动来完成。从MapView onActivate / creationComplete中触发自定义事件,并将esri map组件cbm作为事件的数据部分传递。

在主ViewNavigatorApplication类中有一个侦听此事件的侦听器。在事件侦听器的处理程序中,您可以通过event.data访问它,然后将其分配给在主类或UserGeolocation类中声明的变量。

Brian

答案 1 :(得分:1)

只是为了强调问题的原始意图:我希望绝对引用ViewNavigatorApplication中的View。令我感到惊讶的是,在API中没有明确的方法可以做到这一点,因为通常的做法是以声明式MXML的形式将Flex组件放入Views中。操作堆栈的现有方法在这方面没有帮助,因为它们要么a)以活动视图或第一视图为条件,要么b)影响应用程序的可视化表示。

有三种常见的解决方案已被提出,奇怪的是,这些解决方案主要关注TabbedViewNavigatorApplication中多个堆栈产生的问题,并且未提及ViewNavigatorApplication。

我选择了第一个。