My initial frustration was I'd create this event class, which allowed 
strong-typing, like so:

package
{
    import com.adobe.control.CairngormEvent;

    public class MyEvent extends CairngormEvent
    {
        public static const ACTION:String = "action";

        public var someID:int;

        public function MyEvent(p_type:String, p_someID:int)
        {
            super(p_type);
            someID = p_someID;
        }
    }
}

So, my event now has context.  If I need to have my Command get a person 
record from the DB for example, this event will contain the payload it 
needs; the person ID I'm looking for.  However, by the time it gets to the 
Command, it's a base class, the CairngormEvent.

package
{
    public class MyCommand implements AllTheInterfacesEct
    {
        public function execute ( event:CairngormEvent )
        {
            trace(event.someID); // faith based programming
        }
    }
}

Now, for some, their Events are directly linked to Commands, like so:

LoginEvent will fire LoginCommand which calls LoginDelegate
GetPersonEvent will fire GetPersonCommand which calls GetPersonDelegate

At a simple level, yes, this'll do.  So, you can acutally make some 
assumptions in the above; if you play by the default Cairngorm rules, you 
KNOW by convention that your MyCommand class will get a MyEvent, so you 
could risk up-casting, like so:

someDelegateMethod ( MyEvent ( event ) . someID );

...that's faith, though.  You'll get an exception if for some reason that's 
not the real event.  It'd be better if the compiler caught that vs. the 
runtime, before it's a problem.  For me, I use multiple events inside 
Commands, so it's exacerbated.  The Controller keeps all of this under tabs, 
but again, it'd be nice if MyCommand for example GOT MyEvent in the execute. 
I supposed you could make that assumption; not sure if it'd compile. 
Anyway, convention over strict-typing is ok since a lot of conventions teams 
follow can do the above, for example, and assume you'll get what you need.


----- Original Message ----- 
From: "ben.clinkinbeard" <[EMAIL PROTECTED]>
To: <flexcoders@yahoogroups.com>
Sent: Thursday, July 27, 2006 10:22 PM
Subject: [flexcoders] Re: cairngorm Events and data payloads


Forgive the dense noob here, but how is the type info lost? I thought
that by subclassing CairngormEvent you get basic checking and then you
can just do a cast or 'event as MyCutomEvent' inside the execute
method. I guess I am just not clear on what the issue is and where the
problem lies. Can someone edumacate me?

Thanks,
Ben
http://www.returnundefined.com/

--- In flexcoders@yahoogroups.com, "JesterXL" <[EMAIL PROTECTED]> wrote:
>
> Well, my events extend CairngormEvent, so I can technically upcast
'em when they get in the Command's execute method.  I know Steven
didn't really dig this idea, but if you case the type, you can compare
to the Event's constant like:
>
> public static const EVENT_DOSOMETHING:String = "doSomething";
>
> function execute(event:CairngormEvent)
> {
>     switch(event.type)
>     {
>         case MyEvent.EVENT_DOSOMETHING:
>             someMethod ( MyEvent(event).someTypeSafeProp);
>             break;
>     }
> }
>
>
> ----- Original Message ----- 
> From: Ralf Bokelberg
> To: flexcoders@yahoogroups.com
> Sent: Thursday, July 27, 2006 4:20 PM
> Subject: Re: [flexcoders] Re: cairngorm Events and data payloads
>
>
> The only typesafe solution i can think of, is to abandon
CairngormEvents and replace them by methods of the FrontController.
Most of the apps i've seen so far don't make use of the runtime
changeability anyways. What do we loose if we do it like that?
>
> Cheers,
> Ralf.
>
>
> On 7/27/06, JesterXL <[EMAIL PROTECTED]> wrote:
>   I'm with you.  I've been determing type of event based on the
event.type in the Command's execute method to get my strong-typing back.
>
>   ----- Original Message ----- 
>   From: Ralf Bokelberg
>   To: flexcoders@yahoogroups.com
>   Sent: Thursday, July 27, 2006 12:58 PM
>   Subject: Re: [flexcoders] Re: cairngorm Events and data payloads
>
>
>   Its really a pity, that we loose all the nice type information
while going all the way through Cairngorm.
>
>   Cheers,
>   Ralf.
>
>
>   On 7/27/06, Douglas Knudsen <[EMAIL PROTECTED]> wrote:
>     ah, righto.  thanks d00ds.  I had this hacked up too much...no
worky good.   If only I can get that damn RO to calm down now and do
what its told!  but that's another thread.
>
>
>     DK
>
>
>
>     On 7/27/06, thunderstumpgesatwork < [EMAIL PROTECTED]> wrote:
>       Hi,
>
>       The delegate function thinks you just have a CairngormEvent. I
think
>       you just need to check to make sure the event you received is your
>       custom event type and then cast it.
>
>       so:
>
>       if (eventHere is LoadScorecardEvent)
>       {
>           del.getScorecard( LoadScorecardEvent(eventHere).scorecardId );
>       }
>       else
>       {
>           // do nothing, or raise error, or log warning, or whatever.
>       }
>
>
>       best of luck,
>       Thunder
>
>       --- In flexcoders@yahoogroups.com, "Douglas Knudsen"
>       <douglasknudsen@> wrote:
>       >
>       > can someone point me to a example of how to pass data in a
cairngorm
>       type
>       > event?  I'm trying the below with
>       >
>       > package com.mycompany.events
>       > {
>       >     import com.adobe.cairngorm.control.CairngormEvent;
>       >
>       >     public class LoadScorecardEvent extends CairngormEvent
>       >     {
>       >         public static var EVENT_LOAD_SCORECARD: String =
>       > 'LoadScorecardEvent';
>       >          public var scorecardId:Number;
>       >         /**
>       >          * The constructor,
>       >          */
>       >         public function LoadScorecardEvent( )
>       >         {
>       >             super( EVENT_LOAD_SCORECARD );
>       >
>       >         }
>       >
>       >     }
>       >
>       > }
>       >
>       > then in a view dispatching like so
>       > var devent : LoadScorecardEvent = new LoadScorecardEvent(  );
>       >                 devent.scorecardId = 5;
>       >
>       CairngormEventDispatcher.getInstance().dispatchEvent(
>       > devent );
>       >
>       > and in the command I have
>       >
>       > public function execute( eventHere : CairngormEvent ) : void
>       >        {
>       >           var del : MainDelegate = new MainDelegate( this );
>       >           del.getScorecard( eventHere.scorecardId );
>       >
>       >        }
>       >
>       > But this bombs out with a error about scorecardId not in
eventHere.
>       >
>       > DK
>       >
>       >
>       > --
>       > Douglas Knudsen
>       > http://www.cubicleman.com
>       > this is my signature, like it?
>       >
>
>
>
>
>
>
>
>       --
>       Flexcoders Mailing List
>       FAQ:
http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
>       Search Archives:
http://www.mail-archive.com/flexcoders%40yahoogroups.com
>       Yahoo! Groups Links
>
>
>
>
>
>
>
>
>
>
>
>     -- 
>     Douglas Knudsen
>     http://www.cubicleman.com
>     this is my signature, like it?
>
>
>
>
>   -- 
>   Ralf Bokelberg <[EMAIL PROTECTED]>
>
>   Flex & Flash Consultant based in Cologne/Germany
>
>
>
> -- 
> Ralf Bokelberg <[EMAIL PROTECTED]>
> Flex & Flash Consultant based in Cologne/Germany
>







--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com
Yahoo! Groups Links








--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/flexcoders/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 


Reply via email to