我在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;)没有运气。
答案 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。
我选择了第一个。