`

如何使用Cairngorm3的导航库(Spring AS)

 
阅读更多
一、概述

二、LIB库包配置
  1. 下载需要的LIB库
    • Spring AS 依赖包
      as3commons-bytecode-0.7.swc、as3commons-lang-0.3.swc、as3commons-logging-1.2.swc、as3commons-reflect-1.3.1.swc
    • Spring AS:
      核心库:spring-actionscript-core-1.1.swc、针对于cairngorm3的库 spring-actionscript-cairngorm-1.1.swc
    • 导航库LIB库:
      navigationSpringAS-1.7.swc


  2. 设置编译属性
    打开工程属性选择 Flex 编译器选项卡,在“附加的编译器参数”添加“  -include-libraries flex_libs/as3commons-reflect-1.3.1.swc flex_libs/as3commons-lang-0.3.swc flex_libs/as3commons-logging-1.2.swc ”。将依赖包添加到编译器里面编译,这样在启动时才能使用Spring AS。


     
三、定义导航点 ContentDestination
package cn.com.enboga.scdemo.core.application
{
	public class ContentDestination
	{
		public static const LOGIN:String = "content.login";
		
		public static const MAIN:String = "content.main";
		public static const MAIN_TRUE:String = "content.main.true";
		public static const MAIN_FALSE:String = "content.main.false";
	}
}
 
四、设置导航器,并设置导航点
在导航器里面需要定义元数据[Waypoint]设置为导航器,然后设置每个导航点的automationName为上面定义的导航点名称。这样导航点时候可以根据这个名字导航到这个导航点上。
<?xml version="1.0" encoding="utf-8"?>
<mx:ViewStack xmlns:fx="http://ns.adobe.com/mxml/2009" 
			  xmlns:s="library://ns.adobe.com/flex/spark" 
			  xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%" 
			  xmlns:main="cn.com.enboga.scdemo.core.presentation.main.*" 
			  xmlns:login="cn.com.enboga.scdemo.core.presentation.login.*">
	<fx:Metadata>
		[Waypoint]
	</fx:Metadata>
	
	<fx:Script>
		<![CDATA[
			import cn.com.enboga.scdemo.core.application.ContentDestination;
		]]>
	</fx:Script>
	
	<s:NavigatorContent width="100%"
						height="100%"
						automationName="{ ContentDestination.LOGIN }">
		<login:UILoginGroup  />
	</s:NavigatorContent>
	
	<s:NavigatorContent width="100%"
						height="100%"
						automationName="{ ContentDestination.MAIN }">
		<main:UIMainGroup  />
	</s:NavigatorContent>
</mx:ViewStack>
  
五、接下来为导航器定义一个PM
navigateTo 方法传入导航点名称,就可以导航定位到该导航点
package cn.com.enboga.scdemo.core.presentation
{
	import com.adobe.cairngorm.LogUtil;
	import com.adobe.cairngorm.navigation.NavigationEvent;
	import com.adobe.cairngorm.navigation.state.ISelectedIndex;
	
	import mx.logging.ILogger;
	
	import org.springextensions.actionscript.core.event.EventBus;

	[Landmark(name="content")]
	public class ContentPM implements ISelectedIndex
	{
		private static const LOG:ILogger = LogUtil.getLogger(ContentPM);
		

		[Bindable]
		/** 导航索引 */
		public var selectedIndex:int;
		
		[Enter(time="first")]
		public function firstEnter():void
		{
			LOG.info("content:FirstEnter");
		}
		
		[Enter(time="next")]
		public function enter():void
		{
			LOG.info("content:Enter");
		}
		
		[Exit]
		public function exit():void
		{
			LOG.info("content:Exit");
		}
		
		/** 导航到destination */
		public function navigateTo(destination:String):void
		{
			EventBus.dispatchEvent(NavigationEvent.createNavigateToEvent(destination));
		}
		
		/** 导航到destination */
		public function navigateAway(destination:String):void
		{
			EventBus.dispatchEvent(NavigationEvent.createNavigateAwayEvent(destination));
		}
	}
}
 
六、将导航器组件加入到Spring AS 配置文件
  1. 定义配置文件
    <?xml version="1.0" encoding="utf-8"?>
    <Objects xmlns:mx="http://www.adobe.com/2006/mxml"
    		 xmlns="http://www.springactionscript.org/mxml/config"
    		 xmlns:application="cn.com.enboga.scdemo.core.application.*" 
    		 xmlns:presentation="cn.com.enboga.scdemo.core.presentation.*" 
    		 xmlns:stage="org.springextensions.actionscript.stage.*" 
    		 xmlns:config="org.springextensions.actionscript.ioc.factory.config.*" 
    		 xmlns:cairngorm="http://ns.adobe.com/cairngorm" 
    		 xmlns:main="cn.com.enboga.scdemo.core.presentation.main.*" 
    		 xmlns:login="cn.com.enboga.scdemo.core.presentation.login.*">
    	
    	<!-- Presentation -->
    	<presentation:ContentPM />
    	
    	<!-- Application -->	
    	
    	<!-- Infrastructure -->
    	
    	<!--Spring AS specific initializations-->
    	<stage:DefaultAutowiringStageProcessor/>
    	<config:EventHandlerMetadataProcessor/>
    	
    	
    	<cairngorm:NavigationAdaptor/>
    	<cairngorm:FirstEnterProcessor/>
    	<cairngorm:EveryEnterProcessor/>
    	<cairngorm:NextEnterProcessor/>
    	<cairngorm:ExitProcessor/>
    	<cairngorm:LandmarkProcessor/>
    	<cairngorm:WaypointProcessor/>
    	
    	<cairngorm:WaypointHistory id="contentHistory">
    		<mx:String>content</mx:String>
    	</cairngorm:WaypointHistory>
    	
    	<cairngorm:GlobalHistory id="globalHistory"/>
    </Objects>
     
  2. 加载配置文件,这里是使用的是MXML的加载模式,也可以使用配置文件的加载模式。
    同时把导航器放入主容器里面。
    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    			   xmlns:s="library://ns.adobe.com/flex/spark" 
    			   xmlns:mx="library://ns.adobe.com/flex/mx"
    			   xmlns:cairngorm="com.adobe.cairngorm.*" 
    			   minWidth="955" minHeight="600"
    			   creationComplete="creationCompleteHandler()" xmlns:presentation="cn.com.enboga.scdemo.core.presentation.*">
    	<fx:Script>
    		<![CDATA[			
    			import cn.com.enboga.scdemo.ContentContext;
    			import cn.com.enboga.scdemo.core.presentation.UIContentViewStack;
    			
    			import mx.controls.Alert;
    			import mx.events.FlexEvent;
    			import mx.logging.LogEventLevel;
    			
    			import org.springextensions.actionscript.context.support.FlexXMLApplicationContext;
    			import org.springextensions.actionscript.context.support.MXMLApplicationContext;
    			
    			/** Spring 上下文 */
    			private var _appContext:FlexXMLApplicationContext = new FlexXMLApplicationContext();
    			private var appContext:MXMLApplicationContext;
    			
    			/** 初始化 */
    			protected function creationCompleteHandler():void
    			{
    //				_appContext = new FlexXMLApplicationContext();
    //				_appContext.addConfigLocation("config/application-context.xml");
    //				_appContext.addEventListener(Event.COMPLETE, applicationContext_completeHandler);
    //				_appContext.addEventListener(IOErrorEvent.IO_ERROR, applicationContext_ioErrorHandler);
    //				_appContext.load();
    				
    				appContext = new MXMLApplicationContext(ContentContext);
    				appContext.load();
    			}
    			
    			/** Spring 配置文件初始化完成后执行 */
    			private function applicationContext_completeHandler(event:Event):void {
    				this.addElement(new UIContentViewStack());
    			}
    			/** Spring 配置文件初始化错误 */
    			private function applicationContext_ioErrorHandler(event:IOErrorEvent):void {
    				Alert.show("读取StringAS配置文件出错!", "错误");
    			}
    			
    		]]>
    	</fx:Script>
    	
    	<fx:Declarations>
    		<!-- 定义日志 -->
    		<mx:TraceTarget level="{ LogEventLevel.ALL }"
    						includeCategory="true">
    			<mx:filters>
    				<fx:Array>
    					<fx:String>com.adobe.cairngorm.*</fx:String>
    					<fx:String>cn.com.enboga.scdemo.*</fx:String>
    				</fx:Array>
    			</mx:filters>
    		</mx:TraceTarget>
    	</fx:Declarations>
    	
    	<presentation:UIContentViewStack />
    </s:Application>
    

七、在导航点里面导航到其他导航点

  • UILoginGroup.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009" 
		 xmlns:s="library://ns.adobe.com/flex/spark" 
		 xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
	
	<fx:Script>
		<![CDATA[
			import cn.com.enboga.scdemo.core.application.ContentDestination;
			import cn.com.enboga.scdemo.core.presentation.ContentPM;
			
			[Bindable]
			[Autowired]
			public var contentPM:ContentPM;
		]]>
	</fx:Script>
	
	<s:Button label="首页" click="contentPM.navigateTo(ContentDestination.MAIN)" />
	<s:Button label="true" click="contentPM.navigateTo(ContentDestination.MAIN_TRUE)" />
	<s:Button label="false" click="contentPM.navigateTo(ContentDestination.MAIN_FALSE)" />
</s:VGroup>

 

  • UIMainGroup.mxml
    <?xml version="1.0" encoding="utf-8"?>
    <s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009" 
    		 xmlns:s="library://ns.adobe.com/flex/spark" 
    		 xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300" 
    		 xmlns:main="cn.com.enboga.scdemo.core.presentation.main.*">
    	<fx:Script>
    		<![CDATA[
    			import cn.com.enboga.scdemo.core.application.ContentDestination;
    			import cn.com.enboga.scdemo.core.presentation.ContentPM;
    			
    			[Bindable]
    			[Autowired]
    			public var contentPM:ContentPM;
    		]]>
    	</fx:Script>
    	
    	<s:Button label="返回登录" click="contentPM.navigateTo(ContentDestination.LOGIN)" />
    	<s:Button label="true" click="contentPM.navigateTo(ContentDestination.MAIN_TRUE)" />
    	<s:Button label="false" click="contentPM.navigateTo(ContentDestination.MAIN_FALSE)" />
    	
    	<main:UIMainViewStack />
    </s:VGroup>
    
     
  • UIMainViewStack.mxml
    <?xml version="1.0" encoding="utf-8"?>
    <mx:ViewStack xmlns:fx="http://ns.adobe.com/mxml/2009" 
    			  xmlns:s="library://ns.adobe.com/flex/spark" 
    			  xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
    	<fx:Metadata>
    		[Waypoint]
    	</fx:Metadata>
    	
    	<fx:Script>
    		<![CDATA[
    			import cn.com.enboga.scdemo.core.application.ContentDestination;
    		]]>
    	</fx:Script>
    	
    	<s:NavigatorContent width="100%"
    						height="100%"
    						automationName="{ ContentDestination.MAIN_TRUE }">
    		<s:Label text="MAIN_TRUE" />
    	</s:NavigatorContent>
    	
    	<s:NavigatorContent width="100%"
    						height="100%"
    						automationName="{ ContentDestination.MAIN_FALSE }">
    		<s:Label text="MAIN_FALSE" />
    	</s:NavigatorContent>
    </mx:ViewStack>
    
     
  • 大小: 7.8 KB
  • 大小: 129.3 KB
分享到:
评论

相关推荐

    flex+Spring+Hibernate+Cairngorm+BlazeDS+Spring BlazeDS Integration整合框架

    使用flex 4.5 + Spring 3.0 + Hibernate 3.3 + Cairngorm 2.2.1 + BlazeDS 3.3.0 + Spring BlazeDS Integration 1.0.3整合出的一个登录的小demo·

    Cairngorm入门教程整合spring

    在使用Cairngorm框架后,系统的处理流程大致如下:首先,视图(View)由Flex的Binding来显示ModelLocator中包含的数据。用户通过界面上的交互(如鼠标点击、按钮按下)产生事件(Event),这些事件被FrontController...

    cairngorm简单入门实例(结合spring+ibatis)

    提供的"cairngorm简单入门实例.doc"文档应该详细介绍了如何设置项目、配置Cairngorm框架、整合Spring和iBatis,以及创建和运行一个基本的交互流程。`cairngormDemo`可能是一个包含所有源代码和配置文件的项目,包括...

    Flex3+Cairngorm+Spring的增删改查模块

    Flex3+Cairngorm+Spring的增删改查模块是一个典型的富互联网应用程序(RIA)开发实例,它结合了Adobe Flex3、Cairngorm框架和Spring框架,为小型用户提供了一个全面的CRUD(Create, Read, Update, Delete)功能。...

    一年前整合flex3+cairngorm+spring+hibernate

    这个项目可能是一个企业级应用,通过Flex3构建用户界面,使用Cairngorm作为前端MVC架构,Spring作为后端的服务容器,并依赖Hibernate来处理数据持久化。通过这样的整合,开发者可以构建出一个高度模块化、可维护且...

    cairngorm3实践源码

    通过分析和运行这些示例,你可以学习如何在实际项目中使用Cairngorm3,例如如何创建Command来响应事件,如何使用ModelLocator管理数据,以及如何组织项目的结构。 总的来说,这个源码包为学习Cairngorm3提供了一个...

    Flex+J2EE实例(cairngorm+blazeDS+hibernate+spring)完整版本

    一个 Flex+J2EE实例(cairngorm+blazeDS+hibernate+spring) 本实例为一个 flex 与 java通信项目。前端采用cairngorm框架,后台 采用hibernate+spring 每个部署 步骤,附详细 图文解释。旨在 采用 一种快速开发 ...

    Cairngorm例子

    这些事件通常是AS3中的类,继承自Flex的Event类,带有特定的类型和数据。 3. **ModelLocator**:这是一个全局访问点,用于存储和检索应用程序的数据模型。它提供了一个静态接口,使任何地方的组件都能获取或更新...

    cairngorm3 module的学习

    使用`cairngorm3ModuleTest`示例** `cairngorm3ModuleTest`这个文件很可能是包含一个或多个Cairngorm 3模块的测试项目。这个项目可能包括了模块的实现、命令类、视图组件、模型对象以及相关的事件和代理。通过分析...

    Spring Actionscript IOC 框架与 Flex Cairngorm MVC 应用开发

    在开发 Flex 应用程序时,Spring Actionscript IOC 框架和 Cairngorm MVC 模式结合使用,可以显著提升代码的可维护性和可扩展性。Spring Actionscript 是一个针对 Actionscript3 设计的轻量级框架,其灵感来源于 ...

    Flex+J2EE实例(cairngorm+blazeDS+hibernate+spring) part4.pdf(完)

    根据文档中的描述,要使用Cairngorm框架,首先需要在项目的`libs`目录下添加`Cairngorm.swc`库文件。这一步骤为项目引入了Cairngorm框架的支持。 #### 3. 使用Cairngorm框架 文档中提供了具体的应用实例,包括以下...

    cairngorm3 trunk文件 svn官网下载

    3. **控制器(Controller)**:Cairngorm 3 使用事件指挥者(Event Commander)模式作为控制器,它监听特定的事件并执行相应的命令。这些命令可以是业务逻辑操作,例如数据的加载、保存等。 **Cairngorm 3 主要组件...

    Flex+J2EE实例(cairngorm+blazeDS+hibernate+spring) part3.pdf

    ### Flex+J2EE 实例(Cairngorm+BlazeDS+Hibernate+Spring)Part 3 #### 概述 本章节主要介绍了如何在已有的Flex+J2EE架构项目中集成Spring框架和Hibernate持久层框架。通过这种方式,我们可以更好地实现业务逻辑...

    Flex 使用 Cairngorm 框架与java进行数据交互

    前台FLex工程(单独工程Cairngorm)使用Cairngorm框架与后台java工程(FLexToJava)进行数据交互。功能点: ①flex提交表单保存到数据库; ②flex向后台请求,后台返回List集合,flex将集合填充到combox 附带:...

    Cairngorm开发文档中文版

    Cairngorm是一种轻量级的ActionScript框架,主要用于构建Flex和Adobe ...通过阅读"Cairngorm 开发文档中文版.pdf",你可以深入了解每个组件的使用方法以及如何在实际项目中整合这些组件来构建高效、可维护的应用程序。

Global site tag (gtag.js) - Google Analytics