`
jakielong
  • 浏览: 228341 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Cairngorm初学者入门教程 第五节--Cairngorm中Event,Command与FrontController的关系

    博客分类:
  • Flex
阅读更多

本部分,将学习Cairngorm的核心控制流程:

  • Events:通过使用者操作View所产生的事件,或其他设计所产生的事件。
  • Front Controller:Front Controller 用来注册Command与Events对应,接收Cairngorm Events并将他对应到Cairngorm Commands
  • Command: 操作Cairngorm Business以及呼叫Cairngorm Delegates,这些回传所取得的资料Command会再将它更新到Model Locator

首先介绍Cairngorm 的基本事件流程

使用者在操作View的过程会发出Event,然后由Front Controller来映射指派给对应的Command,Command做完运算处理后会更新ModelLocator的数据,然后View就会更新显示內容。

Front Controller在这里的角色有点像是Manager,专门负责嘴上工夫的,喔,不,其实是接收Event事件,然后指派给Command去做。

有点像是客户(user)跟业务(view)谈好,然后业务去告诉(Dispatch Event)Manager,然后Manager就很简单的说,丟给阿宅工程师(Command)去处理吧。阿宅工程师很辛苦的处理好后,把结果传给(Model),然后业务(view)就拿著结果去跟客户(User)讲,你看做好了,感觉怎样?

在实现这个项目上,我们首先建立好项目架构

在项目中建立events,control,commands三个文件夹。

在events文件夹中我们新增一个LoginEvent.as类,让它继承自CairngormEvent.

LoginEvent 让操作发出登陆事件

package org.rianotes.CairngormSample.events

{

    import com.adobe.cairngorm.control.CairngormEvent;

     

    import flash.events.Event;

     

    public class LoginEvent extends CairngormEvent {

         

        public static const LOGIN:String = "Login";

         

        public var UserID:String;

        public var Password:String;

         

        public function LoginEvent(submittedUserID:String,submittedPassword:String) {

             

            UserID = submittedUserID;

            Password = submittedPassword;

             

            //透過super class 向監聽器發出此const

            super(LOGIN);  

        }

         

        override public function clone():Event {

            return new LoginEvent(UserID,Password);

        }

         

    }

}
 接着我们做一个对应的Command,在commands文件夹下建一个LoginCommand.as类,让它实现ICommand接口。

LoginCommand:接收到LoginEvent后,所需要做的处理。这里就负责将ModelLocator的workflowState值做改变。

代码如下:

package org.rianotes.CairngormSample.commands

{

    import com.adobe.cairngorm.commands.ICommand;

    import com.adobe.cairngorm.control.CairngormEvent;

 

    import mx.controls.Alert;

  

    import org.rianotes.CairngormSample.events.LoginEvent;

    import org.rianotes.CairngormSample.model.ViewModelLocator;

  

    public class LoginCommand implements ICommand {

  

        public var model:ViewModelLocator = ViewModelLocator.getInstance();

  

        public function LoginCommand(){

  

        }

  

        public function execute(event:CairngormEvent):void{

            var loginEvent:LoginEvent = event as LoginEvent;

  

            //COMMAND LOGIC

            if(loginEvent.UserID=="eggant" && loginEvent.Password=="eggant")

            {

                model.workflowState = ViewModelLocator.MAIN_SCREEN;

            }else

            {

                mx.controls.Alert.show("請確認帳號密碼是否正確!?");

            }

        }

  

    }

}
 接着我们在control文件夹下新增一个SampleController.as类,让它继承自FrontController。

SampleController:负责将LoginEvent对应到LoginCommand,就是接收到LoginEvent就指派给LoginCommand。

代码如下:

package org.rianotes.CairngormSample.control

{

    import com.adobe.cairngorm.control.FrontController;

  

    //因為負責Mapping events與commands這兩塊所以先import進來

    import org.rianotes.CairngormSample.events.*;

    import org.rianotes.CairngormSample.commands.*;

  

    //繼承於FrontController

    public class SampleController extends FrontController {

  

        public function SampleController() {

            this.initialize();

        }

  

        public function initialize():void{

  

            //FrontController主要就是用來做Event Mapping的動作

            //接收到什麼Event訊息,然後該做什麼Command,由這邊控制

 

            //ADD COMMANDS

            this.addCommand( LoginEvent.LOGIN, LoginCommand);

  

        }

  

    }

}
 然后我们在LoginView.mxml作如下的修改,使用者点击Login Button就会dispatch LoginEvent

代码如下:

<?xml version="1.0" encoding="utf-8"?>

<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"

horizontalAlign="right" xmlns:components="org.rianotes.CairngormSample.view.components.*">

    <mx:Script>

        <![CDATA[

            import org.rianotes.CairngormSample.events.LoginEvent;

            import org.rianotes.CairngormSample.model.ViewModelLocator;

            [Bindable]

            private var model:ViewModelLocator = ViewModelLocator.getInstance();

  

            private function login(e:MouseEvent):void{

                var loginEvent:LoginEvent = new LoginEvent(ti_UserID.text,ti_Password.text);

                loginEvent.dispatch();   

            }

  

        ]]>

    </mx:Script>

    <mx:Form borderStyle="solid" width="100%">

        <mx:FormItem label="UserID :" width="100%">

             <mx:TextInput id="ti_UserID" width="100%"/>

        </mx:FormItem>

  

        <mx:FormItem label="Password: " width="100%">

            <mx:TextInput id="ti_Password" width="100%"/>

        </mx:FormItem>

  

    </mx:Form>

    <mx:Button label="Login" click="login(event)" />

</mx:VBox>

 最后在Main.mxml中加入SampleController

<?xml version="1.0" encoding="utf-8"?>

<mx:Application

 xmlns:mx="http://www.adobe.com/2006/mxml"

 xmlns:view="org.rianotes.CairngormSample.view.*"

 layout="absolute" xmlns:control="org.rianotes.CairngormSample.control.*">

 

    <mx:Script>

        <![CDATA[

            import org.rianotes.CairngormSample.model.ViewModelLocator;

            [Bindable]

            private var model:ViewModelLocator = ViewModelLocator.getInstance();

        ]]>

    </mx:Script>

  

    <!--Cairngorm:FrontController :讓app中擁有SampleController-->

    <control:SampleController id="controller" />

  

    <mx:ViewStack id="vsMain" width="100%" height="100%" selectedIndex="{model.workflowState}"> 

  

        <!--第0個View-->

        <view:LoginView />

      

        <!--第1個View-->

        <view:MainView />

 

    </mx:ViewStack>

</mx:Application>
 
分享到:
评论

相关推荐

    Cairngorm入门教程整合spring

    Cairngorm框架主要由五大组件构成,分别是ModelLocator、ServiceLocator、Command、Event以及FrontController。ModelLocator类似于一个存放数据的仓库,用于存储程序中所有的值对象(ValueObjects)和共享变量。...

    Flex之使用Cairngorm(3) - Command & Event

    在本文中,我们将深入探讨Flex开发中的Cairngorm框架,并着重关注其核心组件——Command与Event。Cairngorm是Adobe Flex社区广泛使用的轻量级MVC(Model-View-Controller)架构模式,它有助于组织和管理复杂的Flex...

    [cairngorm入门]introducing_cairngorm.pdf

    - **命令(Command)和前端控制器(Front Controller)**:在Cairngorm中,命令是处理特定事件的核心组件,而前端控制器则负责将事件转发给合适的命令进行处理。这种方式有助于保持代码的整洁和逻辑的一致性。 - **服务...

    Flex开发框架cairngorm入门实例教程

    5. **事件(Event)**:事件是Cairngorm中组件间通信的主要方式。在这里,`AddBookEvent`是自定义的事件类型,它携带了新书的信息,由视图组件发布,被控制器接收并处理。 6. **依赖注入(Dependency Injection)**...

    Flex开发框架cairngorm入门实例教程.rar

    在“flex cairngorm入门实例教程”中,你可能会学到如何设置项目环境,引入Cairngorm库,创建和配置模型、控制器、命令以及事件监听器。教程可能还会涵盖如何使用Service Locator来注入依赖,以及如何使用...

    Cairngorm例子

    Cairngorm是一个轻量级的MVC(Model-View-Controller)框架,主要用于构建Adobe Flex和ActionScript 3.0应用程序。这个框架是开源的,由Adobe社区维护,旨在帮助开发者实现更有序、可扩展和可维护的代码结构。 在...

    cairngorm中文版

    在提供的压缩包文件中,"Cairngorm中文版.pdf"和"Cairngorm中文版"很可能是对Cairngorm框架的详细中文教程和实例,对于初学者来说,是学习和理解Cairngorm的宝贵资源。通过深入学习这些资料,开发者可以更好地掌握...

    Flex Cairngorm内部培训教程

    - FrontController监听到事件后,根据事件类型调度对应的Command对象执行。 - Command对象执行业务逻辑,可能涉及调用服务层的方法。 - 如果有服务调用,Responder接口用于处理结果或错误。 - 服务调用返回的数据...

    flex-Cairngorm框架

    Flex Cairngorm框架是Adobe Flex应用程序开发中的一个流行的设计模式,它基于Model-View-Controller(MVC)架构,旨在提高代码的可维护性和可扩展性。Cairngorm框架由SitePen公司开发,最初是为了满足大型企业级Flex...

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

    学习这个实例,开发者可以了解到如何在实际项目中应用Cairngorm框架,如何将Flex客户端与Spring+iBatis服务端进行交互,以及如何通过事件驱动的方式组织代码,提升项目的可维护性。 总之,这个入门实例为开发者提供...

    Cairngorm框架配置

    - **FrontController(前端控制器)**:作为事件调度器,FrontController接收来自视图的CairngormEvent,并将其映射到相应的Command。这种机制确保了事件处理的解耦。 - **Command(命令)**:每个Command负责处理...

    Flex3/4 Cairngorm框架 入门 源码 主要是登陆注册功能。

    在Cairngorm中,控制器通常实现为命令(Command)类,它们监听特定事件,执行相应的业务逻辑,并可能更新模型或触发其他命令。 4. **服务定位器(Service Locator)**:提供对应用程序服务的全局访问,例如远程服务...

    Cairngorm开发文档中文版

    5. **事件(Event)**:事件驱动是Cairngorm通信机制的基础。事件可以是自定义的ActionScript类,通过EventDispatcher发送和监听。这种方式使得组件之间松耦合,可以独立地工作和更新。 6. **代理(Proxy)**:代理...

    Cairngorm.swc+Cairngorm+开发文档中文版.rar 套装

    这个“Cairngorm.swc+Cairngorm+开发文档中文版.rar”套装提供了一个完整的Cairngorm框架,以及相关的中文开发文档,对于初学者和经验丰富的开发者来说都是一个宝贵的资源。 Cairngorm的核心设计理念是基于Model-...

    flex Cairngorm 实例

    Flex Cairngorm框架是Adobe Flex应用程序开发中的一个流行MVC(Model-View-Controller)框架,它提供了一种结构化的方式来组织复杂的Flex项目,以实现可维护性和可扩展性。本实例将深入探讨Cairngorm的各个组件以及...

    Cairngorm deepdive

    Cairngorm中的FrontController、ModelLocator和服务定位器(ServiceLocator)均采用了单例模式。这种模式确保了这些核心组件在整个应用程序中只有一个实例,并且提供一个全局访问点,从而方便了各部分间的通信和协作...

    Flex轻量级开发框架-Cairngorm介绍

    - **CairngormEvent、CairngormEventDispatcher与FrontController** - `CairngormEventDispatcher`是事件分发器,用于分发事件,它继承自Flex的`EventDispatcher`类,采用单例模式。`CairngormEvent`是所有事件的...

    Cairngorm实例教程

    在“Cairngorm实例教程”中,你将深入学习如何有效地运用Cairngorm框架来构建灵活、可扩展的Flex应用。 1. **MVC模式**:MVC模式是软件设计中的一个经典模式,它将应用程序分为三个主要组件:模型(Model)、视图...

    Cairngorm2.rar

    Cairngorm是Adobe Flex社区中的一个开源框架,主要用于构建大型、可扩展的富互联网应用程序(RIA)。...无论是初学者还是经验丰富的开发者,都可以从Cairngorm的文档、源码和库文件中获得宝贵的知识和灵感。

Global site tag (gtag.js) - Google Analytics