Flex之使用Cairngorm(2) - 使用ModelLocator
Update:需要有一定的Flex基础
使用FlexBuilder新建一个Flex Project,解压Cairngorm2_2_1-bin.zip某个文件夹,添加Cairngorm.swc到项目Build Path。
具体过程:(附件Add Flex Library)
package net.imzw.UserManagerDemo.model{import com.adobe.cairngorm.model.IModelLocator;import mx.collections.ArrayCollection;public class UserManagerModelLocator implements IModelLocator{// Single Instance of Our ModelLocatorprivate static var instance:UserManagerModelLocator;public function UserManagerModelLocator(enforcer:SingletonEnforcer) {if (enforcer == null) {throw new Error( "You Can Only Have One UserManagerModelLocator" );}}// Returns the Single Instancepublic static function getInstance() : UserManagerModelLocator {if (instance == null) {instance = new UserManagerModelLocator( new SingletonEnforcer() );}return instance;}//DEFINE YOUR VARIABLES HEREpublic var workflowState:uint = 0;// DEFINE VIEW CONSTATSpublic static const LOGIN_SCREEN:uint = 0;public static const MAIN_SCREEN:uint = 1;}}class SingletonEnforcer {}//DEFINE YOUR VARIABLES HEREpublic var workflowState:uint = 0;
<?xml version="1.0" encoding="utf-8"?><mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"><mx:Script><![CDATA[import net.imzw.UserManagerDemo.model.UserManagerModelLocator;import mx.controls.Alert;private var modelLocator:UserManagerModelLocator = UserManagerModelLocator.getInstance();private function login(e:MouseEvent):void{if( loginNameTextInput.text == "imzw" && passwordTextInput.text == "imzw" ){modelLocator.workflowState = UserManagerModelLocator.MAIN_SCREEN;}} ]]></mx:Script><mx:Form defaultButton="{loginButton}"><mx:FormHeading label="Please Login" /><mx:FormItem label="LoginName"><mx:TextInput id="loginNameTextInput" /></mx:FormItem><mx:FormItem label="Password"><mx:TextInput id="passwordTextInput" displayAsPassword="true"/></mx:FormItem><mx:HBox horizontalAlign="right" width="100%"><mx:Button id="loginButton" click="{login(event)}" label="Login"/></mx:HBox></mx:Form></mx:VBox><?xml version="1.0" encoding="utf-8"?><mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"><mx:Script><![CDATA[import net.imzw.UserManagerDemo.model.UserManagerModelLocator;[Bindable]private var modelLocator:UserManagerModelLocator = UserManagerModelLocator.getInstance();]]></mx:Script><mx:Button label="Logout" id="logoutButton" click="{modelLocator.workflowState = UserManagerModelLocator.LOGIN_SCREEN }"/></mx:VBox><?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:view="net.imzw.UserManagerDemo.views.*"> <mx:Script><![CDATA[import net.imzw.UserManagerDemo.model.UserManagerModelLocator;import mx.controls.Alert;[Bindable]private var modelLocator:UserManagerModelLocator = UserManagerModelLocator.getInstance();]]></mx:Script><mx:ViewStack width="100%" height="100%" selectedIndex="{modelLocator.workflowState}"><view:LoginForm /><view:MainScreen /></mx:ViewStack></mx:Application>