Doh!

I should have grasped that the first time through the docs.
Arbitrating through the behavior is precisely what I needed.

Thanks!

Eric

On Sep 15, 12:53 pm, Aaron Newton <[email protected]> wrote:
> What you're looking for is an event arbitrator. ... which is what Behavior
> is (and Delegator, too).
>
> You write your Classes with event hooks like normal (onComplete, onLoad,
> onShow, onHide, etc). And then you fire events against Behavior that your
> filters can look for. Here's an example:
>
> https://github.com/anutron/more-behaviors/blob/master/Source/Forms/Be...
>
> This line adds an event to the Behavior instance that's invoking the filter.
> When that behavior instance fires the event "layout:display" it invokes that
> callback.
>
> Or here, a delegator that fires events when it updates the DOM:
>
> https://github.com/anutron/more-behaviors/blob/master/Source/Delegato...
>
> This allows two filters to pass messages to each other (or the classes they
> instantiate to do so) by using the addEvent/fireEvent methods on the api. So
> if you have Class A that fires and event that Class B needs to know about,
> your filter, which creates those instances, can do so, even if the other
> doesn't exist.
>
>
>
>
>
>
>
> On Thu, Sep 15, 2011 at 7:09 AM, Eric Patrick <[email protected]> wrote:
> > Thanks for the feedback.
>
> > I will be happy to release them once I've kicked the tires. Trying to
> > make them really reusable begets another question with respect to
> > event delegation.
>
> > I have a series of very specific classes (Contact, Message,
> > Attachment, etc) that represent business objects and communicate via
> > web services. Typically these classes have a target DOM element they
> > use to display their content.
>
> > I then have generic behavior to field things like pagination of a list
> > of Contacts (or Messages, or Attachments, etc.).
>
> > When a pagination event fires, I essentially want my Contact class to
> > listen for it.
>
> > Option 1: create an custom event on Element
>
> > Create a custom event on Element (Element.paginate, based on the click
> > handler), and have the Contact's DOM element listen for the paginate
> > event.
>
> > However, that strikes me as "resource intensive". I may well
> > misunderstand, but the Element.paginate's condition function would be
> > evaluated on every mouse click on every element. Given the complexity
> > of some of my pages, I'm worried about performance.
>
> > I had hoped something like this would work instead:
>
> >http://jsfiddle.net/kBGLQ/
>
> > Option 2:
>
> > In my Paginate behavior, I call a global function to find and return
> > the containing class (Contact), and fire a custom event on the
> > class.
>
> > This works, and strikes me a reasonably efficient. However, it ties my
> > Paginate behavior to the existence of very specific classes.
>
> > Seehttp://jsfiddle.net/wB3n7/1/
>
> > Option 3:
>
> > I suspect I'm missing a more generic, equally efficient option.
>
> > Thanks as always,
>
> > Eric
>
> > On Sep 14, 2:32 pm, Aaron Newton <[email protected]> wrote:
> > > Hi Eric,
>
> > > Thus far I haven't worried about namespacing filters. Remember that you
> > > control which ones are loaded and which ones are in effect. Behavior
> > > instances can have local filters that override globals, etc.
>
> > > If, however, you want to be safe, you could use any of the examples
> > below. I
> > > don't know if I have a preference.
>
> > > Are you going to release these behaviors? I'd love to see more people
> > > publishing them...
>
> > > On Wed, Sep 14, 2011 at 10:09 AM, Eric Patrick <[email protected]>
> > wrote:
> > > > Thanks for the Behavior / BehaviorAPI Aaron; it's great to work with!
>
> > > > I am developing a bunch of behaviors centered on dealing with AJAX-
> > > > loaded data grids:
>
> > > > - Paginate: handles creation of DOM elements for a pagination row,
> > > > raising an event when a page or display size is changed
> > > > - OrderBy: handles making column headers sortable
> > > > - Filter: handles modification of JSON from a form to re-submit via
> > > > Request.HTML or Request.JSON
>
> > > > It occurs to me others may do something similar. Any thoughts or
> > > > advice on "name spacing" behaviors?
>
> > > > <div data-behaviors="Paginate, Filter"/>
>
> > > > vs. my name space (mns)
>
> > > > <div data-behaviors="mns.Paginate, mns.Filter"/>
>
> > > > vs.
>
> > > > <div data-behaviors="mns-Paginate, mns-Filter"/>
>
> > > > vs.
>
> > > > <div data-behaviors="mnsPaginate, mnsFilter"/>
>
> > > > Thanks in advance,
>
> > > > Eric

Reply via email to