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?

Reply via email to