Cairngorm中的SequenceCommand 用法

2

本文作者:dmh2002  发布于:2008-3-25  分类:Flex  点击:


    你有几个事件,想要顺序执行,在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

本文标签: Cairngorm  Flex3  
本文Url: http://dmh2002.com/post/54.html (出自: dmh2002's Blog)
我要引用: 点击这里获取该日志的TrackBack引用地址

相关文章:

30. Flex3 Module 模块化 应用程序 开发  (2008-6-17 19:54:28)

23. Flex3在线范例推荐 2008-03-28更新  (2008-3-28 9:46:33)

53. Flex支持的中文字体  (2008-3-25 19:18:25)

52. Flex启动事件的执行顺序  (2008-3-25 14:53:34)

44. 孕期宝典(FLex3,Cairngorm架构,Module模块开发,C#,fluorinefx架构 | 研发中 08-03-18更新)  (2008-3-18 17:1:19)

28. Flex功能性测试工具:Fluorida 发布   (2008-3-8 18:16:44)

26. Cairngorm的简单结构图  (2008-3-7 20:28:25)

25. Flex3 Beta3 Language Reference CHM(Flex3 Help CHM) 下载  (2008-3-6 20:36:56)

21. toolTip中的文本换行  (2008-3-4 10:11:55)

20. Flex3 正式版 破解补丁  (2008-3-3 10:9:4)

2 Comments

QQ124294272
干什么这么复杂,再一个事件的onresutlt再 cairngorm.dispatchevet(xxx)另一个要执行的事件,不就OK了?
hspeed
通常如果要连续执行的话都是两个啊,有必要搞个factory出来不

Write a comment ?