I think this may help.

http://www.helihobby.com/html/alon_desingpattern.html



--- In [email protected], "Shannon" <[EMAIL PROTECTED]> 
wrote:
>
> I am new to Cairngorm and Flex (I'm All About Flash) so bear with 
me.
> 
> I am creating a component and I want it to use Cairngorm. I also 
want 
> to be sure that some events fired from the component are only heard 
> by the Cairngorm of the single component instance. Component 
> namespaces won't help because I use multiple instances of the same 
> event, I could probably filter by instance, but I am trying not to 
> hack (you'll probably see the irony after the next sentence...
> 
> If I use Cairngorm as is... ...and I utilize the Singleton 
> CairngormEventDispatcher, as soon as I put two instances of a 
> component on stage, the events from one instance cause the front 
> controller on the second instance to fire those events 
> 
> Sadly this is probably operator error.
> 
> Though I am guessing that someone has had this problem before and 
> surely there is a best practice solution to this already, I thought 
I 
> would spend a little time to explore the issue further and find my 
> own solution.
> 
> I decided to try to handle this by using separate instances of the 
> CairngormEventDispatcher (MyViewHelper.dispatcher) for each 
instance 
> of my component. Then I could inject that dispatcher into 
> MyFrontController when it is instantiated so that it knows which 
> dispatcher to call. 
> 
> Just when I think I am on to something, I had to override 
addCommand 
> so that it would add an event listener to that instance instead of 
> the Singleton CairngormEventDispatcher. This is great but it 
required 
> two modifications (minor, yet still modifications) to the Cairngorm 
> FrontController class in order to compile my creation. (see 
snippets 
> below) Basically I took two private things and made them protected.
> 
> Of course this might effect other pieces I have yet to build, but 
my 
> level of mastery coerces me into believing I have found a solid 
> answer. <snicker/> If those iteration two guys were really geniuses 
> they would have made these protected in the first place. 
> 
> Ha, ha, ha, just kidding, (I crack myself up)
> 
> So I can either use my own FrontController impl or I can ask the 
> question: Is this a bug in Cairngorm? Or am I correct in beleiving 
I 
> must be doing something wrong...
> 
> Some code samples:
> 
> //
> // myViewHelper Snippet:
> //
> public function MyViewHelper(view:Object)
> {
> dispatcher = new CairngormEventDispatcher();
> controller = new MyFrontController(dispatcher);
> ...
> }
> 
> //
> // myFrontController Snippet:
> //
> public class MyFrontController extends FrontController
> {
> 
> private var dispatcher:CairngormEventDispatcher;
> 
> public function MyFrontController
(dispatcher:CairngormEventDispatcher)
> {
>   super();
>   this.dispatcher = dispatcher
>   ...
> }
> 
> public override function addCommand( commandName : String, 
> commandRef : Class ) : void
> {
> if( commands[ commandName ] != null )
> {
> throw new Error( "Command already registered for " + commandName );
> }
> commands[ commandName ] = commandRef;
> dispatcher.addEventListener( commandName, executeCommand );
> }
> }
> 
> //
> // Cairngorm FrontController Mods
> //
> public class FrontController
> {
> // ST - 03/15/2007 : private var commands : Dictionary = new 
> Dictionary();
> protected var commands : Dictionary = new Dictionary();
> 
> // ST - 03/15/2007 : private function executeCommand( event : 
> CairngormEvent ) : void
> protected function executeCommand( event : CairngormEvent ) : void
> 
> ...
> 
> }
>


Reply via email to