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