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