Hi Martin, thanks for your quick response!

>> AFAIK jQuery unbinds all registered event listeners for a DOM element when 
>> this element is removed with jQuery method like #remove(), #replaceWith(), 
>> etc.

I think so too... However I am not sure that that is indeed the way that Wicket 
removes components that are replaced by an Ajax request? I think Wicket relies 
on their own code that they based on Prototype JS ? 

>> Better ask in jQuery forums.

I am not sure if that is the right place. Seems to me that Wicket is doing the 
inserting / removing of the components for the page. The statement() method 
lets me hook into the insertion phase to add my own listeners (be it with 
jQuery or any other framework) so it seems to me there should also be a 
corresponding method for the removing phase where you can unhook/unbind events 
etc... 

-Stijn


-----Original Message-----
From: Martin Grigorov [mailto:mgrigo...@apache.org] 
Sent: donderdag 15 maart 2012 13:32
To: users@wicket.apache.org
Subject: Re: How to cleanup when plugin/behavior is removed through Ajax?

Hi,

AFAIK jQuery unbinds all registered event listeners for a DOM element when this 
element is removed with jQuery method like #remove(), #replaceWith(), etc.
But I'm not sure this is the case when you remove a parent element of an 
element with event listeners. Better ask in jQuery forums.

On Thu, Mar 15, 2012 at 11:22 AM, Stijn de Witt 
<stijn.dew...@planonsoftware.com> wrote:
> Hi. We are using WiQuery in our application to attach some behaviors to some 
> components. For example a resize behavior to react on the component being 
> resized. I added some debug logging and I see that when we switch panels 
> (through Ajax) all event listeners for the components on the new panel are 
> added, but the old ones from the panel being replaced are never removed. So 
> the list of event handlers just grows and grows...
>
> We register event listeners in the statement method of the WiQuery behavior, 
> like this:
>
> public abstract class BaResizeEventBehavior extends 
> WiQueryAbstractBehavior {
>  // ...
>  @Override public JsStatement statement() {
>    return new JsQuery(getComponent()).$().chain("resize", new 
> JsScope() {
>      @Override public void execute(JsScopeContext aScopeContext) {
>        // event listener implementation here
>      }
>    });
>  }
> }
>
> This will generate Javascript code that looks like this:
>
> $('#componentId').resize(function() {
>  // event listener implementation here });
>
> This code will register a jQuery event on the component with id 
> 'componentId'. However when this component disappears from the page, I would 
> like this event handler to be unbound again, but that does not happen.
>
> Any ideas?
>
> Thanks,
>
> -Stijn
>
> P.S:
> This is cross-posted to 
> http://groups.google.com/group/wiquery-plugins/browse_thread/thread/aaceac38d60adbcf
>  because that group seems to have hardly any traffic... Hopefully one of the 
> Wicket gurus here knows a bit about WiQuery as well? Although maybe this 
> question can be formulated for Wicket as well as also there when doing Ajax 
> we need to clean up after components when they are removed from the page 
> right?



--
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to