FLex 中框架Carngorm的流程和工作原理

Cairngorm2.2 框架中六大元素:

bussiness(services,delegate),commands ,control(FrontController和Event),model(modelLocator),view,vo

 

 

 

FLex 中框架Carngorm的流程和工作原理

 

1。View 不但负责显示数据,他换负责派遣事件(Event),通过CairngormEventDispatcher类的getInstance()方法获得唯一的一个CairngormEventDispatcher类型的实例,并且使用这个实例的dispatchEvent方法派遣相应的事件,以便给FrontController捕获这个事件,这个是CairngormEvent类型的,程序元扩展这个事件,使用它可以携带一些数据。

 

如:点击添加事件:

 

 public function addContact() : void
    {
      //构建VO对象

       var contactVO : ContactVO = new ContactVO();
       contactVO.fullname = fullname.text;
       contactVO.emailaddress = emailaddress.text;
     // 创建事件

     var event : AddContactEvent = new AddContactEvent( contactVO );
      //转发事件
     CairngormEventDispatcher.getInstance().dispatchEvent( event );

    } 

 

2。一旦View派遣了一个事件,FrontController捕获这个事件通过addCommand方法把这个事件映射到相应的Command,同时这个事件所携带的数据也一同传递给那个Command了。

 

FrontController中相等于一个HashMap对象

  protected var commands : Dictionary = new Dictionary();

其中

 

添加命令的方法:

 public function addCommand( commandName : String, commandRef : Class, useWeakReference : Boolean = true ) : void

 

删除命令的方法:

  public function removeCommand( commandName : String ) : void

 

执行命令方法的

  protected function executeCommand( event : CairngormEvent ) : void

 

Responder接口必须实现的方法:

  function onResult( event : * = null ) : void;

   function onFault( event : * = null ) : void;

命令必须实现的接口:Command,Responder接口


   

在自定义控制器中继承子前端控制器(FrontController类)

必须调用父类的方法注册事件的Command命令

如下:

public class AddContactControl extends FrontController
 {
  public function AddContactControl()
  {
   addCommand( AddContactControl.EVENT_ADD_CONTACT, AddContactCommand );
  }
  
  public static const EVENT_ADD_CONTACT : String = "addcontact";
 }

 

模型控制器必须继承自ModelLocator类,

同时声明操作对象

 

VO必须继承子ValueObject对象。

 

3。commands通过execute()方法接受那个事件,然后执行需要的动作,如果需要与后台打交道(例如提交数据或读取数据),那就要通过Delegate来跟后台大交道了,Delegate负责选择rpc(这个rpc在services里定义好并先在DefaultApplication里实例化),然后启动他,需要提交的数据是由那个事件携带的,command接收事件后,把事件所携带的数据由Delegate处理,在这里,Delegate会有result(data:Object)和fault(info:object)方法,当提交数据成功或失败后调用,然而在这两个方法里,都会获取相应的处理结果(例如提交成功后会接收后台返回的数据,这些数据被存放在data参数的result属性里)通常在这两个方法里,把处理结束后的得到的数据传回给command(类似的在command里也有result和fault方法,然后由command处理这些数据例如用于更新ModelLocator)

 

Command 命令类必须实现接口:ICommand  实现方法    function execute( event : CairngormEvent ) : void;

 

4。如果command通过execute方法接收事件后并不需要与后台打交道,那就不需要Delegate了,直接达到第五步

 

5。command更新ModelLocator 里的数据,无论之前的走那一步,必须更新ModelLocator大概都是必须的。

 

6。一旦ModelLocator被更新,view里的数据也自动更新,因为View绑定了ModelLocator,view的数据由ModelLocator提供的。

 

你可能感兴趣的:(框架,工作,Flex)