Cairngorm中的SequenceCommand 用法

2008-3-25 21:42:4

    你有几个事件,想要顺序执行,在Cairngorm的你可以使用command包的SequenceCommand类来解决这个问题。

     首先:定义一个ChainEvent,所有需要按顺序执行的事件都继承自该事件。 

      package xxx.xxx.events
      {
           import com.adobe.cairngorm.control.CairngormEvent;

           public class ChainEvent extends CairngormEvent
           {
                 public function ChainEvent( type:String )
                 {
                       super( type );
                  }
 
           public var nextChainedEvent:ChainEvent;
           }
        }
 
       然后再写一个事件类,作用是将这些事件串起来,如这样
 
       package xxx.xxx.events
       {
             public class EventChainFactory
             {
                  public static function chainEvents( evts:Array ):ChainEvent
                  {
                         var len:int = evts.length;
                         if ( len < 1 )
                             return null;
                       
                         var returnEvent:ChainEvent = evts[ 0 ] as ChainEvent;
          
                         var i:int = len-1;
                         for ( i; i>=0; i-- )
                         {
                              if ( i != ( len-1 ) )
                              {
                                    var e:ChainEvent = evts[ i ] as ChainEvent;
                                    var next_e:ChainEvent = evts[ i+1 ] as ChainEvent;
                                    e.nextChainedEvent = next_e;
                               }
                         }
          
                     return returnEvent;
                }
           }
       }

    然后使用的时候就这样

    ....
    var firstEvent : ChainEvent    = new ChainEvent( AppController.FIRST_EVENT );
    var secondEvent :ChainEvent    = new ChainEvent( AppController.SECOND_EVENT )
    var chainEvent : ChainEvent = EventChainFactory.chainEvents([ firstEvent,secondEvent ]);
    CairngormEventDispatcher.getInstance().dispatchEvent( chainEvent );
    ....

    再然后,在firstEvent和secondEvent所对应的command里大概这样写,要注意的是这些command需继承自SequenceCommand

    package com.xx.xx.commands
    {
          import ......
 
          public class FirstCommand extends SequenceCommand implements IResponder
          {
        
                override public function execute( event:CairngormEvent ) : void
                 {
                 //获取下一步需要执行的事件
                       nextEvent = ChainEvent( event ).nextChainedEvent
                      //do something        
                  }
      
                  //---------------------------------
                 public function result( data:Object ) : void
                 {
                       //这样,Cairngorm就可以自己dispatch下一个事件     
                      executeNextCommand();
                 }
     
                 //---------------------------------
                 public function fault( info : Object ) : void
                 {
                 }

            }
       }

   原文地址:http://www.riachina.com/showtree.aspx?topicid=7667&postid=34535

点击这里获取该日志的TrackBack引用地址
上一篇: Flex支持的中文字体下一篇: 我的Blog域名正式改为dmh2002.com
发布:dmh2002 | 分类:Flex | 评论:0 | 引用:0 | 浏览:

评论:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。