Yeah, but if you firebug the Event object after recursive unregister, you
will see that every element that doesnt had a  _prototypeEventID will create
an entry in Event.cache. This is because the way the eventId is generated
and THERE I'll not mess with :)

Those entry are empty, I know, but ohhh... its damn ugly. ;)

P.s. agreed with the 'stopObservingNested' thing.

[]'s
Labs

2008/10/2 puckpuck <[EMAIL PROTECTED]>

>
> When I made that post, I was very groggy, and realized I used a CSS
> selector *, which well... is horrid slow, especially on IE.  using
> elem.descendants() instead would of made far more sense.
>
> Also I would stay away from checking on the existing of
> _prototypeEventID on the element.  This is an internal prototype
> property, which can change at any time.  Relying on such a property
> can be dangerous when you attempt to do an upgrade, even a small, bug
> fix one.  The stopObserving method, will check the internal prototype
> registry for events, which is very fast, and recommended.
>
> On Oct 2, 9:03 am, "Lea Hayes" <[EMAIL PROTECTED]> wrote:
> > Hi puckpuck!,
> >
> > That's a really handy little snippet, so much simpler than manually
> > enumerating nested HTML elements and stopping them individually (which
> > I have previously done).
> >
> > If this functionality were to be bundled within the Prototype
> > framework I personally think it would be better to offer an additional
> > method (i.e. stopObservingNested or the like). Otherwise, the
> > stopObserving method could cause undesirable effects, like if nested
> > events are still wanted.
> >
> > Thanks!
> > Lea Hayes
> >
> > 2008/10/2 puckpuck <[EMAIL PROTECTED]>:
> >
> >
> >
> > > This exact question was asked today at TAE.
> >
> > > At this time, no.  stopObserving will not go through the children of
> > > the container and remove events.  In the future it is certainly
> > > possible.  Mind you it wouldn't be very difficult to write your own
> > > method to recurse through all the children of a given element, and
> > > call stopObserving on those children.
> >
> > > var elem = $("myElement");
> > > elem.stopObserving()
> > > elem.select("*").invoke("stopObserving");
> >
> > > On Oct 1, 11:02 am, "labs2.0" <[EMAIL PROTECTED]> wrote:
> > >> Hi. Please, would you be kind to clearify this to me: if I call
> > >> "Event.stopObserving(myWindow)", beeing 'myWindow' a div (ajax
> > >> generated window wich can came and go as the user will),  who doesnt
> > >> have observers, but its a container (and parent) for many other
> > >> elements (components) that may does, may doesn't have observers, will
> > >> this call work recursivelly? If dont, why???
> >
> > >> Assuming it doesnt, and that prototype beautifully make things in a
> > >> clean and natural way, should'nt we espect some behaviour like that? I
> > >> mean, in a large framework, where I create a window with many comps,
> > >> one could say that its my job to create a event garbage collector
> > >> (which I did hacking prototype 1.5.0) to clean up things when, say, a
> > >> window pops out, but then again, if I already have a nice way to setup
> > >> events, its ask too much to have a nice one to get rid off of all of
> > >> them too? :)
> >
> > >> In prototype 1.5.0 I've hacked a "Event.observeFor(container, element,
> > >> event)" and a " Event.unloadContainer(container);" for memory sake.
> >
> > >> Am I missing something new (and cool) about Events here?
> >
> > >> Thank you and let me be +1 to say that prototype ROCKS!!
> >
> > >> []'s
> > >> Labs
> >
> > >> On 10 set, 09:38, "T.J. Crowder" <[EMAIL PROTECTED]> wrote:
> >
> > >> > Hi folks,
> >
> > >> > > try a look at the API documentation:
> http://www.prototypejs.org/api/event/stopObserving
> > >> > > (you exactly do what is wrong !!)
> >
> > >> > Actually, David, what she's doing is just fine.  She's using a
> > >> > new(ish) feature of stopObserving which appears to be missing from
> the
> > >> > docs.  If you don't include a handler in the stopObserving call, ALL
> > >> > events hooked up by observe() for the giveneventname on the given
> > >> > element will be removed.  This is quite handy.  Even better, if you
> > >> > leave off theeventname as well, stopObserving() will unhook all of
> > >> > the handlers for that element [that were set up by observe()]
> > >> > entirely.
> >
> > >> > So this would be wrong:
> >
> > >> >    Event.observe(myelement, 'click',
> > >> > this.clickHandler.bindAsEventListener(this));
> > >> >     ...
> > >> >    Event.stopObserving(myelement, 'click',
> > >> > this.clickHandler.bindAsEventListener(this));
> >
> > >> > because the function arguments don't match.
> >
> > >> > But this is fine:
> >
> > >> >    Event.observe(myelement, 'click',
> > >> > this.clickHandler.bindAsEventListener(this));
> > >> >     ...
> > >> >    Event.stopObserving(myelement, 'click');
> >
> > >> > It removes *all* click handlers hooked using observe() from the
> > >> > element.
> >
> > >> > And this is fine:
> >
> > >> >    Event.observe(myelement, 'click',
> > >> > this.clickHandler.bindAsEventListener(this));
> > >> >     ...
> > >> >    Event.stopObserving(myelement);
> >
> > >> > It removes *all* handlers for all events hooked using observe() from
> > >> > the element.  Great for when you're about to remove the element.
> >
> > >> > I'll see if there's a doc ticket in Lighthouse for this and add one
> if
> > >> > there isn't.
> > >> > --
> > >> > T.J. Crowder
> > >> > tj / crowder software / com
> >
> > >> > On Sep 10, 12:14 pm, david <[EMAIL PROTECTED]> wrote:
> >
> > >> > > Hi Lea,
> >
> > >> > > try a look at the API documentation:
> http://www.prototypejs.org/api/event/stopObserving
> > >> > > (you exactly do what is wrong !!)
> >
> > >> > > Because you should do:
> >
> > >> > >
> myTestClass.myCallback=this.clickHandler.bindAsEventListener(this);
> >
> > >> > > myTestClass.prototype.initEvents = function()
> > >> > > {
> > >> > >    var myDiv1 = $('exampleDiv1');
> > >> > >    myDiv1.observe('click',myTestClass.myCallback);
> >
> > >> > > }
> >
> > >> > > And to stopeventobserve:
> >
> > >> > > myTestClass.prototype.clearEvents = function()
> > >> > > {
> > >> > >    var myDiv1 = $('exampleDiv1');
> > >> > >    myDiv1.stopObserving('click',myTestClass.myCallback);
> >
> > >> > > }
> >
> > >> > > But we are from the original question which is if we could
> > >> > > stopObserving alleventfrom one element?
> > >> > > The response is NO (otherwise, let me know, it save a lot of time
> and
> > >> > > efforts sometime).
> >
> > >> > > --
> > >> > > david
> >
> > >> > > On Sep 2, 8:41 pm, Kruncher <[EMAIL PROTECTED]> wrote:
> >
> > >> > > > Hi,
> >
> > >> > > > I have just found out about the Prototype framework and am
> somewhat
> > >> > > > impressed by how much simpler it makes things. I have found that
> using
> > >> > > > the observe and stopObserving functions has eliminated a pretty
> major
> > >> > > >memoryleak within my scripts.
> >
> > >> > > > Below is a snippet of my code (which appears to function
> correctly
> > >> > > > with Prototype 1.6), but I just wanted to confirm that this is
> in fact
> > >> > > > correct. From the user documentation it says that the
> stopObserving
> > >> > > > method should be called in practically the same way as the
> observe
> > >> > > > method. However, I want to make sure that ALL handlers are
> stopped for
> > >> > > > a particulareventof a particular element.
> >
> > >> > > > // Called when object is initialized.
> > >> > > > myTestClass.prototype.initEvents = function()
> > >> > > > {
> > >> > > >    var myDiv1 = $('exampleDiv1');
> > >> > > >    myDiv1.observe('click',
> > >> > > > myTestClass.clickHandler.bindAsEventListener(this));}
> >
> > >> > > > // Called whenever an object is destroyed.
> > >> > > > myTestClass.prototype.clearEvents = function()
> > >> > > > {
> > >> > > >    var myDiv1 = $('exampleDiv1');
> > >> > > >    myDiv1.stopObserving('click');           // Is this line
> acceptable
> > >> > > > to stop ALL click events for myDiv1?
> >
> > >> > > > }
> >
> > >> > > > Many thanks,
> > >> > > > Lea Hayes
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Prototype & script.aculo.us" group.
To post to this group, send email to prototype-scriptaculous@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to