Event's are an integration point into your classes for when something occurs that the developer who invokes the class cannot predict. For example, you would never need an "onInitialize" event really, because the person using the class can just ... run their code.
new Foo(); somethingelse(); I can predict that the initialization has occurred. What I can't predict when using the Foo class is when, say, the user will click it, or when it will receive new data from the server. Or, if it has any asynchronous event (animation for example) when that will finish. Events allow developers who use your code (which includes you) to customize behavior when these asynchronous and non-predictable events occur. onNextPage, onClose, onComplete, onUpdate, onDisplay, onDelete. But they aren't really the same as callbacks. Callbacks, generally speaking, are functions executed when a method you invoke is completed. JSONP is a great example here. You use the JSONP class by specifying an onComplete event. Every time you use an instance of JSONP to fetch data, the same method is used, over and over again. BUT, JSONP itself has a callback. It sends a request to a server (a la script injection) and specifies a SPECIFIC function that is called when the server responds. It is, in this case, unique to every request. While your event is called every time JSONP gets a response, the callback it creates is called only once for each request; it creates a new callback for each request. The Chain class automates callback management for some use cases. The hallmark of it being that a function added to the chain is ever only called once. Aaron On Tue, Jan 4, 2011 at 7:32 AM, Stewart Mckinney <[email protected]>wrote: > I tend to use callbacks when I want something to happen after a certain > process completes, or to tie two class instances together/give them > references to one another, but I don't really care if any other objects know > about it. A good example would be instantiating a class that creates a Faye > client to talk to a nodeJS server, and then including a callback to the > initialize function to tie it to my ChatClient class once bidirectional > communication was established. (This is not necessarily an optimal design, > however). > > Using the same example, I would attach events to the ChatClient class to > let me know when I had recieved new messages, and events to the UI elements > (probably classes themselves) which would call functions on the ChatClient > class for sending messages. > > I tend to look at callbacks as "once but never again", and events as "I'm > going to be doing this far more than once" > > On Tue, Jan 4, 2011 at 9:39 AM, אריה גלזר <[email protected]> wrote: > >> There are 2 questions you need to ask yourself: >> 1. Is it productive to have the possibility of multiple callbacks or is it >> a good idea to limit it to one callback? >> 2. Is the function an integral part of the behavior or is it something >> that has no affect on the methods behavior? >> >> Events allows the user to hook to certain behaviors of your class and >> attach extra behavior to them. For example, if I have a Class that does some >> effect, I might choose to supply an Options parameter to override that >> effect. Since the effect is integral, it's important that it will happen >> once and that I will _know_ that it happened (events may or may not be >> attached). However, I might also choose to supply a 'done' event, so users >> of the class will know that the effect is done, and that they can now do >> something (maybe with the result of the operation). >> >> An example of a place where I used callbacks is my YADMM class( >> http://mootools.net/forge/p/yaddm) where the menu opening function is an >> option, whereas the same action will also fire an 'open'/'close' event, as >> well as attach relevant classes to the elements. >> >> As a side note - your question should be phrased a little differently - a >> callback implies that the function is simply a way for you to call back >> outside code - which is exactly what events are for. Not every anonymous >> function we pass to our classes is a callback. >> >> >> On Tue, Jan 4, 2011 at 4:07 PM, Robert <[email protected]> wrote: >> >>> Hi Clement, >>> rowvalidator is a validator, so it has to have some way to stop >>> execution if something is wrong. I can use chaining, another >>> parameter - or perhaps events are not best for this - some kind of >>> filter or decorator would be better. Anyway, it was only an example. >>> >>> I think events may be better for extending classes - but I haven't >>> reach that far - yet. ;-) >>> >>> >>> Thanks, >>> >>> On Jan 4, 2:51 pm, Clement Hallet <[email protected]> wrote: >>> > Hi Robert, >>> > >>> > In my mind, events don't replace callbacks, it's just an other way to >>> use them. >>> > However it's a more "dynamic" way : you can add (one or more) and >>> remove events callbacks whenever you want. >>> > >>> > I modified your code to use eventshttp://jsfiddle.net/Jxtuk/2/ >>> > >>> > I'm not sure about what "rowvalidator" does, is its return value used >>> inside your "fun" function ? >>> > If it is, i'm not sure you can use events, since the callbacks returns >>> are not transmit through"fireEvent" (and it couldn't do that, since it may >>> call several callbacks, each one having its own return value). >>> > >>> > Hope what i told is clear enough (my first message in that mailing ^^) >>> > >>> > Clément. >>> > >>> > Le 4 janv. 2011 à 14:20, Robert a écrit : >>> > >>> > >>> > >>> > >>> > >>> > >>> > >>> > > hey masters of moo! >>> > >>> > > I am trying to make my code more "mooish". If I understand properly, >>> > > it means using events in exchange of callbacks. >>> > > But I am not sure how to do this and what is the benefit of using >>> > > events? >>> > >>> > > For example I have class for tabular data editing, where I can add >>> > > some validation (pseudocode): >>> > >>> > >http://jsfiddle.net/htZAC/ >>> > >>> > > Does it make sense to change callback for fireEvent? And how should I >>> > > attach it (where)? During creation of object? >>> > >>> > > Thanks, >>> > > btw. is there any other guide to events in moo except for >>> > >http://ryanflorence.com/mootools-events/? >>> >> >> >> >> -- >> Arieh Glazer >> אריה גלזר >> 052-5348-561 >> http://www.arieh.co.il >> http://www.link-wd.co.il >> >> >
