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

Cairngorm 之 一、运行机制

    博客分类:
  • Flex
阅读更多

 一、Cairngorm运行机制

1.1 Cairngorm的大体工作流程

客户端界面是View组成的,View使用Flexbingding绑定来显示ModelLocator中包含的数据。View根据诸如鼠标点击之类的用户动作产生Event。这些EventFrontController“广播”并“监听”。FrontController会将Event映射到一个Command类。主要的业务逻辑在这个Command中处理,Command创建所需的委托Delegate,委托进行与后台交互数据以及得到数据,然后更新存储在ModelLocator中的数据。由于View是绑定到ModelLocator中的数据上的,所以View就自动更新了。

使用Cairngorm框架后,可以使基于后台调用的开发,条例清晰,增删功能简单。

 

 

 

 

 

 

 

1.2 一个功能涉及到的类

1.2.1自定义事件类此类

此类extends CairngormEvent

 

1.2.2事件处理Command

此类implements com.adobe.cairngorm.commands.ICommand, mx.rpc.IResponder.IResponder

实现的接口方法:

1execute( event:CairngormEvent ):void,当此事件被激发的时候,就执行此方法,原因下面将说明。

2result( info:Object ):voidfault( info:Object ):void

当使用mx.rpc.IResponderRemotOjbect进行后台调用时,调用成功、失败的事件处理方法。

 

1.2.3事件监听注册Control

此类extends FrontController,调用父类的addCommand方法,进行注册事件监听。

其父类FrontControlleraddCommand方法如下,commands是一个Dictionary当注册时间监听时保存信息,通过事件名称保存处理此事件的Command类名。

当事件触发时,调出相应的Command类:var commandToInitialise : Class = getCommand( event.type );

实例化此类:var commandToExecute : ICommand = new commandToInitialise();

调用监听方法:commandToExecute.execute( event );

由于所有的Command类都实现了ICommand接口,所以都会去执行自己的execute方法。

  

public function addCommand( commandName : String, commandRef : Class, useWeakReference : Boolean = true ) : void
      {
         if( commands[ commandName ] != null )
            throw new CairngormError( CairngormMessageCodes.COMMAND_ALREADY_REGISTERED, commandName );
         
         commands[ commandName ] = commandRef;
         CairngormEventDispatcher.getInstance().addEventListener( commandName, executeCommand, false, 0, useWeakReference );
      }

 

 

 

1.2.4数据存储类Model

                     此类implements IModelLocator,并且使用“单一模式”防止数据二义性。

 

1.2.4后台调用RemoteObject服务

需要使用Cairngorm提供的ServiceLocator,建立一个mxm文件基于ServiceLocator。在里面写RemoteObject服务;

 

1.2.5后台调用代理 GeneralServices

首先通过ServiceLocator得到注册好的RemoteObjectthis.service = ServiceLocator.getInstance().getRemoteObject("remoteObject名称");

然后开始写调用的方法,用AsyncToken进行调用后的监听,通过addResponder方法指定处理类。

var call:AsyncToken = service.Logon(user.userName, user.password);

                call.addResponder(处理结果类);

处理结构的类,必须implements mx.rpc.IResponder.IResponder接口,实现resultfault方法,一般为Command类。

 

 

1.3 一个功能的工作流程

首先将“事件监听注册Control类”和“后台调用RemoteObject服务”,通过mxm标签形式初始化。

用户通过界面交互,出发一个事件(按钮事件等),在此事件处理中new出对应的功能事件,然后调用dispatch方法

犹豫已经功过FrontController类的addCommand方法注册了事件监听,所以当事件发生时,会马上执行对应的Command类中的execute方法

Commandexecute方法中new出对应后台代理类,并调用对应功能方法;

当后台结果返回时,根据成功失败,调用result fault方法;

得到的数据后,更新相应的modul 上的数据,界面上显示的数据级联更新。

 

 

  • 大小: 7.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics