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

2012-03-15 Thread Stijn de Witt
Ok thanks for this info. I will see if we can upgrade.

-Stijn

-Original Message-
From: Martin Grigorov [mailto:mgrigo...@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 
 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:mgrigo...@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 
>  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: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 
>>  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 im

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

2012-03-15 Thread Martin Grigorov
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
 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:mgrigo...@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 
>  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: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 
>>  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 even

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

2012-03-15 Thread Stijn de Witt
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:mgrigo...@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 
 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: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 
>  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
>

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

2012-03-15 Thread Martin Grigorov
On Thu, Mar 15, 2012 at 2:51 PM, Stijn de Witt
 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: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 
>  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
>



-- 
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



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

2012-03-15 Thread Stijn de Witt
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 
 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



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

2012-03-15 Thread Martin Grigorov
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
 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



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

2012-03-15 Thread Stijn de Witt
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?