做好导航条后,要实现点击不同导航项目,就跳转到不同页面。我觉得用模块来做挺不错,这样不用像用组件那样一股脑加载进来,只需要在请求某个页面后加载模块,大大缩减了主应用程序的体积。第一次调用某模块有1秒的延迟,以后再调用就不会延迟了。


 

比如有一个名为NavigationMenu的导航组件(component):


 

 


 


  1. <?xml version="1.0" encoding="utf-8"?>  
     
  2. <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"  
     
  3.          xmlns:s="library://ns.adobe.com/flex/spark"  
     
  4.          xmlns:mx="library://ns.adobe.com/flex/mx">  
     
  5.     <s:layout>  
     
  6.         <s:VerticalLayout horizontalAlign="center"/>  
     
  7.     </s:layout>  
     
  8.     <fx:Script>  
     
  9.         <!--[CDATA[  
     
  10.             import mx.controls.Alert;  
     
  11.             import mx.core.Application;  
     
  12.             import mx.events.MenuEvent;  
     
  13.         ]]-->  
     
  14.     </fx:Script>  
     
  15.     <fx:Declarations>  
     
  16.         <s:XMLListCollection id="navigationMenuData">  
     
  17.             <fx:XMLList xmlns="">  
     
  18.                 <menuitem label="首页" module="pageModules/IndexPageModule.swf">  
     
  19.                 </menuitem>  
     
  20.                 <menuitem label="计划管理">  
     
  21.                     <submenu label="查看总招生计划"  
     
  22.                              type="radio"  
     
  23.                              groupName="managePlan"  
     
  24.                              module="pageModules/planManagement/ViewTotalRecruitPlan.swf"/>  
     
  25.                     <submenu label="查看分专业招生计划"  
     
  26.                              type="radio"  
     
  27.                              groupName="managePlan"  
     
  28.                              module="pageModules/planManagement/ViewMajorRecruitPlan.swf"/>  
     
  29.                     <submenu label="查看分省招生计划"  
     
  30.                              type="radio"  
     
  31.                              groupName="managePlan"  
     
  32.                              module="pageModules/planManagement/ViewProvinceRecruitPlan.swf"/>  
     
  33.                     <submenu type="separator"/>  
     
  34.                     <submenu label="调整招生计划"  
     
  35.                              type="radio"  
     
  36.                              groupName="managePlan"  
     
  37.                              module="pageModules/planManagement/ChangeRecruitPlan.swf"/>  
     
  38.                     <submenu label="查看调整记录"  
     
  39.                              type="radio"  
     
  40.                              groupName="managePlan"  
     
  41.                              module="pageModules/planManagement/ViewChangeHistory.swf"/>  
     
  42.                     <submenu label="导入招生计划"  
     
  43.                              type="radio"  
     
  44.                              groupName="managePlan"  
     
  45.                              module="pageModules/planManagement/ImportRecruitPlan.swf"/>  
     
  46.                 </menuitem>  
     
  47.             </fx:XMLList>  
     
  48.         </s:XMLListCollection>  
     
  49.     </fx:Declarations>  
     
  50. <mx:MenuBar id="navigationMenuBar"  
     
  51.                           labelField="@label"  
     
  52.                          dataProvider="{navigationMenuData}"/>  
     
  53. </s:Group> 
     


 

在主应用程序中把这个导航条放进去,然后在下方定义一个容器(比如fx:BorderContainer)来显示以后将要请求的页面:


 



  1. <s:BorderContainer id="mainContainer"  
     
  2.                        borderColor="#cccccc"  
     
  3.                        borderWeight="2"  
     
  4.                        width="100%"  
     
  5.                        height="100%"  
     
  6.                        top="100">  
     
  7.         <s:layout>  
     
  8.             <s:VerticalLayout horizontalAlign="center"/>  
     
  9.         </s:layout>  
     
  10. </s:BorderContainer> 


     


 

在主应用程序的代码块中添加事件:


 



  1. <fx:Script>    
     
  2.         <!--[CDATA[  
     
  3.             import mx.controls.Alert;  
     
  4.             import mx.events.MenuEvent;  
     
  5.             import mx.events.ModuleEvent;  
     
  6.             import mx.modules.IModuleInfo;  
     
  7.             import mx.modules.Module;  
     
  8.             import mx.modules.ModuleManager;  
     
  9.              
     
  10.             public var mm:IModuleInfo;  
     
  11.             public var mod:Module;  
     
  12.              
     
  13.             protected function init():void  
     
  14.             {  
     
  15.                 navMenu.navigationMenuBar.addEventListener(MenuEvent.ITEM_CLICK, menuItem_clickHandler);  
     
  16.             }  
     
  17.              
     
  18.             protected function menuItem_clickHandler(event:MenuEvent):void  
     
  19.             {  
     
  20.                 mm = ModuleManager.getModule(event.item.@module);  
     
  21.                 mm.addEventListener(ModuleEvent.READY, modReady);  
     
  22.                 mm.load();  
     
  23.                  
     
  24.             }  
     
  25.              
     
  26.             public function modReady(event:ModuleEvent):void  
     
  27.             {  
     
  28.                 mod = event.module.factory.create() as Module;  
     
  29.                 mainContainer.removeAllElements();  
     
  30.                 mainContainer.addElement(mod);  
     
  31.             }  
     
  32.         ]]-->  
     
  33.     </fx:Script> 


     


 

这样就可以在点击导航菜单中的项目后,将相应模块装入刚刚定义的容器里。