Thank you a lot for explanations ! 8)

On 2/28/06, Ryan Gahl <[EMAIL PROTECTED]> wrote:
>
> I got a lot of great help yesterday on my calendar questions. Makes me want
> to post another contribution :-)
>
> This one is called EventPublisher. This was packaged also in Marco Jaeger's
> recent post with his excellent Dialogs (a la Windows), but now I'll post it
> by itself in case someone missed it, and also give a little explanation for
> ya'll.
>
> This class allows you to very easily fire and subscribe to events from any
> object. It allows you to attach event handlers both synchronously and
> asynchronously, attach any number of event handlers to a specific event, and
> pass any arguments to those handlers that you want. The file is attached
> (sans the ".js" extension to get past my company's firewall, just re-add
> that once you have the file, replacing the ".txt").
>
> USAGE:
>
> Let's say you have an object called BouncingBall, and you'd like to fire
> notification events every time the ball bounces. To enable this, just extend
> BouncingBall to inherit from EventPublisher, and then use the fireEvent
> method...
>
> Object.extend(Object.extend(BouncingBall.prototype,
> EventPublisher.prototype),
> {
>     initialize: function(color)
>     {
>         this.color = color;
>         ...other setup stuff and some code the makes the ball start
> bouncing...
>     },
>
>     _bounce: function(howHigh)
>     {
>         //...fire the onBounce event with no arguments...
>         this.fireEvent( "onBounce" );
>
>         //...or fire it with some arguments...
>         this.fireEvent( "onBounce", {ball: this, howHigh: howHigh} );
>
>         ...make the ball bounce here...
>     }
> });
>
>
> Then let's say you have a class called Floor that tracks all your
> BouncingBalls, and needs to know when they bounce so it can push back on
> them (you know, for every action there is an equal and opposite reaction)...
>
> Floor.prototype =
> {
>     initialize: function(balls)
>     {
>         this.balls = [];
>
>         //if an initial balls collection was passed in, loop through it,
> adding each ball separately in order to setup the event handlers...
>         if (balls)
>             $A(balls).each(function(b) { this.addBall(b); }.bind(this));
>     },
>
>     addBall: function(ball)
>     {
>         this.balls.push(ball);
>
>         // set up the event handler for this ball (synchronously, so no 3rd
> parameter)...
>         ball.attachEventHandler( "onBounce", this.ballBounce.bind(this) );
>
>         // ...or set it up so it executes asynchronously (pass in "true" as
> the 3rd parameter)
>         // obviously a real floor can handle many balls bouncing at the same
> time, so this is probably the way to go
>         ball.attachEventHandler( "onBounce", this.ballBounce.bind(this),
> true );
>     },
>
>     ballBounce: function(args)
>     {
>         // assuming arguments are passed (the 2nd fireEvent is used from the
> 1st example)...
>
>         // special physics... red balls bounce twice as high :-)
>         if (args.ball.color == "red")
>             this.doTheBounceStuff(args.ball, args.howHigh * 2);
>         else
>             this.doTheBounceStuff(args.ball, args.howHigh);
>     },
>
>     doTheBounceStuff: function(ball, howHigh)
>     {
>         ...push back on the ball to make a bunch of dead physicists proud...
>     }
> };
>
>
> Please let me know if you have any questions about this class... Most of the
> other methods should be pretty self-explanatory though. You should be able
> to drop it in and be on your way to a consistent, robust event model for all
> your objects :-) Enjoy!
>
>
>
>
>
> Sincerely,
>
> Ryan Gahl
>
> Design Engineer
>
> Camtronics Medical Systems (an Emageon Company)
>
> [EMAIL PROTECTED]
>
> 262-369-3251
>
>
> The information transmitted in this electronic mail is intended only for the
> person or entity to which it is addressed and may contain confidential,
> proprietary, and/or privileged material.  Any review, retransmission,
> dissemination or other use of, or taking of any action in reliance upon,
> this information by persons or entities other than the intended recipient is
> prohibited. If you received this in error, please contact the sender and
> delete the material from all computers.
> _______________________________________________
> Rails-spinoffs mailing list
> Rails-spinoffs@lists.rubyonrails.org
> http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs
>
>
>
>
_______________________________________________
Rails-spinoffs mailing list
Rails-spinoffs@lists.rubyonrails.org
http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs

Reply via email to