You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Stijn de Witt <St...@planonsoftware.com> on 2012/03/15 10:22:43 UTC

How to cleanup when plugin/behavior is removed through Ajax?

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?

RE: How to cleanup when plugin/behavior is removed through Ajax?

Posted by Stijn de Witt <St...@planonsoftware.com>.
Ok thanks for this info. I will see if we can upgrade.

-Stijn

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

With 1.5 Wicket sends notifications before removing and after adding an element.
See test "Wicket.DOM.replace - test event notifications" at http://git-wip-us.apache.org/repos/asf/wicket/repo?p=wicket.git;a=blob_plain;f=wicket-core/src/test/js/dom.js;hb=master
for an example.
But you need to upgrade to 1.5 ...

On Thu, Mar 15, 2012 at 3:05 PM, Stijn de Witt <St...@planonsoftware.com> wrote:
> We are still at Wicket 1.4 even...
>
> However, presumably there is a method one can implement to respond to the removal of components as well as the adding?
>
> Upgrading to a snapshot is probably not allowed by my company policy and I'd rather not modify Wicket itself... But surely others must have found a way to remove events bound to components? Seems like fundamental stuff.
>
> -Stijn
>
>
> -----Original Message-----
> From: Martin Grigorov [mailto:mgrigorov@apache.org]
> Sent: donderdag 15 maart 2012 13:59
> To: users@wicket.apache.org
> Subject: Re: How to cleanup when plugin/behavior is removed through Ajax?
>
> On Thu, Mar 15, 2012 at 2:51 PM, Stijn de Witt <St...@planonsoftware.com> wrote:
>> 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 ?
>
> No. Including version 1.5 Wicket uses its own JavaScript code to do this (see wicket-ajax.js #replaceOuterHtml()).
> In Wicket 6.0 jQuery is used behind the scenes and this method is implemented with: jQuery(oldElement).after(newElementHtml".remove().
>
> If upgrading to Wicket 6.0-SNAPSHOT is not an option for you then you 
> can use monkey patching approach to override the old impl in 1.5
>
>>
>>>> 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:mgrigorov@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 <St...@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-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>
>
>
> --
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>



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

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


Re: How to cleanup when plugin/behavior is removed through Ajax?

Posted by Martin Grigorov <mg...@apache.org>.
With 1.5 Wicket sends notifications before removing and after adding an element.
See test "Wicket.DOM.replace - test event notifications" at
http://git-wip-us.apache.org/repos/asf/wicket/repo?p=wicket.git;a=blob_plain;f=wicket-core/src/test/js/dom.js;hb=master
for an example.
But you need to upgrade to 1.5 ...

On Thu, Mar 15, 2012 at 3:05 PM, Stijn de Witt
<St...@planonsoftware.com> wrote:
> We are still at Wicket 1.4 even...
>
> However, presumably there is a method one can implement to respond to the removal of components as well as the adding?
>
> Upgrading to a snapshot is probably not allowed by my company policy and I'd rather not modify Wicket itself... But surely others must have found a way to remove events bound to components? Seems like fundamental stuff.
>
> -Stijn
>
>
> -----Original Message-----
> From: Martin Grigorov [mailto:mgrigorov@apache.org]
> Sent: donderdag 15 maart 2012 13:59
> To: users@wicket.apache.org
> Subject: Re: How to cleanup when plugin/behavior is removed through Ajax?
>
> On Thu, Mar 15, 2012 at 2:51 PM, Stijn de Witt <St...@planonsoftware.com> wrote:
>> 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 ?
>
> No. Including version 1.5 Wicket uses its own JavaScript code to do this (see wicket-ajax.js #replaceOuterHtml()).
> In Wicket 6.0 jQuery is used behind the scenes and this method is implemented with: jQuery(oldElement).after(newElementHtml".remove().
>
> If upgrading to Wicket 6.0-SNAPSHOT is not an option for you then you can use monkey patching approach to override the old impl in 1.5
>
>>
>>>> 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:mgrigorov@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 <St...@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-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>
>
>
> --
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>



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

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


RE: How to cleanup when plugin/behavior is removed through Ajax?

Posted by Stijn de Witt <St...@planonsoftware.com>.
We are still at Wicket 1.4 even...

However, presumably there is a method one can implement to respond to the removal of components as well as the adding?

Upgrading to a snapshot is probably not allowed by my company policy and I'd rather not modify Wicket itself... But surely others must have found a way to remove events bound to components? Seems like fundamental stuff.

-Stijn


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

On Thu, Mar 15, 2012 at 2:51 PM, Stijn de Witt <St...@planonsoftware.com> wrote:
> 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 ?

No. Including version 1.5 Wicket uses its own JavaScript code to do this (see wicket-ajax.js #replaceOuterHtml()).
In Wicket 6.0 jQuery is used behind the scenes and this method is implemented with: jQuery(oldElement).after(newElementHtml".remove().

If upgrading to Wicket 6.0-SNAPSHOT is not an option for you then you can use monkey patching approach to override the old impl in 1.5

>
>>> 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:mgrigorov@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 <St...@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-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>



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

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


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


Re: How to cleanup when plugin/behavior is removed through Ajax?

Posted by Martin Grigorov <mg...@apache.org>.
On Thu, Mar 15, 2012 at 2:51 PM, Stijn de Witt
<St...@planonsoftware.com> wrote:
> 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 ?

No. Including version 1.5 Wicket uses its own JavaScript code to do
this (see wicket-ajax.js #replaceOuterHtml()).
In Wicket 6.0 jQuery is used behind the scenes and this method is
implemented with: jQuery(oldElement).after(newElementHtml".remove().

If upgrading to Wicket 6.0-SNAPSHOT is not an option for you then you
can use monkey patching approach to override the old impl in 1.5

>
>>> 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:mgrigorov@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 <St...@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-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>



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

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


RE: How to cleanup when plugin/behavior is removed through Ajax?

Posted by Stijn de Witt <St...@planonsoftware.com>.
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:mgrigorov@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 <St...@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-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


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


Re: How to cleanup when plugin/behavior is removed through Ajax?

Posted by Martin Grigorov <mg...@apache.org>.
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
<St...@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-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org