Wrapping elements, preventing leaks, attach, detach
Hi, I'm trying to figure out onAttach() onDetatch() onDetachChildren() to ensure I'm not leaking, but I don't quite get it. Is there a reference somewhere? Am I best digging through the code to figure out the flow? I've read the javadocs, but am having a hard time putting it together. Got a gwt app, server sends me down a block of html (a table which is a calendar), gwt client takes the html, and calls setInnerHtml() on a widget. Perfect. The server's html has a div id=foo/div that I want to take over, and shove widgets into. It'd be nice if I could do: RootPanel().get(foo).add(...); // but this asserts What I've done instead is create a wrapper which subclasses Widget, implements HasClickHandlers, and makes onAttach() public. Then I create my wrapped Anchor, get the div in the server's html and append: Anchor link = new Anchor(click me); MyWrapper wrapper = new MyWrapper(link.getElement()); wrapper.addOnClickHandler(...); wrapper.onAttach(); // without this, I can't handle the clicks HorizontalPanel hp = new HorizontalPanel(); hp.add(link); // add more to hp DivElement serverElement = Document.get().getElementById(foo).cast(); serverElement.appendChild(hp.getElement()); --- This all works great. I've got my panel in the div, and the link works. I'm just wondering if I need to do more, as I don't really 'get' the attach, detach, detachChildren flow. Thanks. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: Wrapping elements, preventing leaks, attach, detach
On Oct 5, 2:30 pm, Brian hibr...@gmail.com wrote: Hi, I'm trying to figure out onAttach() onDetatch() onDetachChildren() to ensure I'm not leaking, but I don't quite get it. Is there a reference somewhere? Am I best digging through the code to figure out the flow? I've read the javadocs, but am having a hard time putting it together. Got a gwt app, server sends me down a block of html (a table which is a calendar), gwt client takes the html, and calls setInnerHtml() on a widget. Perfect. The server's html has a div id=foo/div that I want to take over, and shove widgets into. Have a look at HTMLPanel then. It'd be nice if I could do: RootPanel().get(foo).add(...); // but this asserts What I've done instead is create a wrapper which subclasses Widget, implements HasClickHandlers, and makes onAttach() public. Then I create my wrapped Anchor, get the div in the server's html and append: Anchor link = new Anchor(click me); MyWrapper wrapper = new MyWrapper(link.getElement()); wrapper.addOnClickHandler(...); wrapper.onAttach(); // without this, I can't handle the clicks HorizontalPanel hp = new HorizontalPanel(); hp.add(link); // add more to hp DivElement serverElement = Document.get().getElementById(foo).cast(); serverElement.appendChild(hp.getElement()); --- This all works great. I've got my panel in the div, and the link works. I'm just wondering if I need to do more, as I don't really 'get' the attach, detach, detachChildren flow. Not detaching your widgets when you remove them from the document (and/ or on window.unload) will lead to memory leaks in some browsers (mainly, or maybe even *only*, IE6/7/8). You'll note that RootPanel, and every widget that has a wrap() static method, will register itself to be detached on window close, which will detach all its children. But really, what you're trying to do is already there, in HTMLPanel. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: Wrapping elements, preventing leaks, attach, detach
Thanks. I still have to call onAttach() on my widget in order for the ClickHandler to fire. HTMLPanel hpanel = new HTMLPanel(); Wrapper w = new Wrapper(Test); w.addClickHandler(...); w.onAttach(); hpanel.add(w, foo); This does clean up the code a lot -- but I'm still left wondering when/ where to call onDetach on the wrapper. I'm guessing I'd need to subclass HTMLPanel, handle onDetach, and call it on my wrapper. On Oct 5, 9:20 am, Thomas Broyer t.bro...@gmail.com wrote: On Oct 5, 2:30 pm, Brian hibr...@gmail.com wrote: Hi, I'm trying to figure out onAttach() onDetatch() onDetachChildren() to ensure I'm not leaking, but I don't quite get it. Is there a reference somewhere? Am I best digging through the code to figure out the flow? I've read the javadocs, but am having a hard time putting it together. Got a gwt app, server sends me down a block of html (a table which is a calendar), gwt client takes the html, and calls setInnerHtml() on a widget. Perfect. The server's html has a div id=foo/div that I want to take over, and shove widgets into. Have a look at HTMLPanel then. It'd be nice if I could do: RootPanel().get(foo).add(...); // but this asserts What I've done instead is create a wrapper which subclasses Widget, implements HasClickHandlers, and makes onAttach() public. Then I create my wrapped Anchor, get the div in the server's html and append: Anchor link = new Anchor(click me); MyWrapper wrapper = new MyWrapper(link.getElement()); wrapper.addOnClickHandler(...); wrapper.onAttach(); // without this, I can't handle the clicks HorizontalPanel hp = new HorizontalPanel(); hp.add(link); // add more to hp DivElement serverElement = Document.get().getElementById(foo).cast(); serverElement.appendChild(hp.getElement()); --- This all works great. I've got my panel in the div, and the link works. I'm just wondering if I need to do more, as I don't really 'get' the attach, detach, detachChildren flow. Not detaching your widgets when you remove them from the document (and/ or on window.unload) will lead to memory leaks in some browsers (mainly, or maybe even *only*, IE6/7/8). You'll note that RootPanel, and every widget that has a wrap() static method, will register itself to be detached on window close, which will detach all its children. But really, what you're trying to do is already there, in HTMLPanel. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: Wrapping elements, preventing leaks, attach, detach
What's odd (ie, I don't get this stuff yet) is the HTMLPanel's onAttach doesn't get called when htmlpanel.add() is called. Soo.. instead of wrapping the widget, it seems better to wrap the HTMLPanel and call onAttach on the panel itself, and add it to RootPanel.detachOnWindowClose(). ie, Label myLabel = new Label(Hey now); myLabel.addClickHandler(..); MyPanel p = new MyPanel(); // subclassed HTMLPanel, onAttach is public p.add(myLabel, foo); p.onAttach(); // just does: super.onAttach(); RootPanel.detachOnChildClose(p); // ensures everyone's onDetach called Just guessing here... On Oct 5, 9:40 am, Brian hibr...@gmail.com wrote: Thanks. I still have to call onAttach() on my widget in order for the ClickHandler to fire. HTMLPanel hpanel = new HTMLPanel(); Wrapper w = new Wrapper(Test); w.addClickHandler(...); w.onAttach(); hpanel.add(w, foo); This does clean up the code a lot -- but I'm still left wondering when/ where to call onDetach on the wrapper. I'm guessing I'd need to subclass HTMLPanel, handle onDetach, and call it on my wrapper. On Oct 5, 9:20 am, Thomas Broyer t.bro...@gmail.com wrote: On Oct 5, 2:30 pm, Brian hibr...@gmail.com wrote: Hi, I'm trying to figure out onAttach() onDetatch() onDetachChildren() to ensure I'm not leaking, but I don't quite get it. Is there a reference somewhere? Am I best digging through the code to figure out the flow? I've read the javadocs, but am having a hard time putting it together. Got a gwt app, server sends me down a block of html (a table which is a calendar), gwt client takes the html, and calls setInnerHtml() on a widget. Perfect. The server's html has a div id=foo/div that I want to take over, and shove widgets into. Have a look at HTMLPanel then. It'd be nice if I could do: RootPanel().get(foo).add(...); // but this asserts What I've done instead is create a wrapper which subclasses Widget, implements HasClickHandlers, and makes onAttach() public. Then I create my wrapped Anchor, get the div in the server's html and append: Anchor link = new Anchor(click me); MyWrapper wrapper = new MyWrapper(link.getElement()); wrapper.addOnClickHandler(...); wrapper.onAttach(); // without this, I can't handle the clicks HorizontalPanel hp = new HorizontalPanel(); hp.add(link); // add more to hp DivElement serverElement = Document.get().getElementById(foo).cast(); serverElement.appendChild(hp.getElement()); --- This all works great. I've got my panel in the div, and the link works. I'm just wondering if I need to do more, as I don't really 'get' the attach, detach, detachChildren flow. Not detaching your widgets when you remove them from the document (and/ or on window.unload) will lead to memory leaks in some browsers (mainly, or maybe even *only*, IE6/7/8). You'll note that RootPanel, and every widget that has a wrap() static method, will register itself to be detached on window close, which will detach all its children. But really, what you're trying to do is already there, in HTMLPanel. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: Wrapping elements, preventing leaks, attach, detach
On Oct 5, 4:13 pm, Brian hibr...@gmail.com wrote: What's odd (ie, I don't get this stuff yet) is the HTMLPanel's onAttach doesn't get called when htmlpanel.add() is called. Of course. It'll be called when adding the HTMLPanel into a container widget. Soo.. instead of wrapping the widget, it seems better to wrap the HTMLPanel and call onAttach on the panel itself, and add it to RootPanel.detachOnWindowClose(). How are you showing/displaying your HTMLPanel ?!?! -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: Wrapping elements, preventing leaks, attach, detach
ok thank you. I had been doing : String s = getServerHTML(); DOM.getElementById(id).setInnerHTML(s); // woops id is an id to a Panel in the hierarchy. I didn't know how to set its innerHTML without using the DOM class. From there, I was using Dom methods to get the div I wanted to append a child to, and that's when the various attach and detach issues came up. Pain and suffering. Instead of using an HTMLPanel to replace the div inside the html, I used an HTMLPanel as content to the whole server html. From there, I just hooked up things as normal. HTMLPanel htmlpanel = new HTMLPanel( getServerHTML() ); simplePanel.add(htmlpanel); When I want to take over some part of the server's html: htmlpanel.add(someElement, someID); Now I've got -no- subclassed widgets nor panels, handlers fire, so I'm assuming everything is hooked up correctly. Thanks much. On Oct 5, 10:26 am, Thomas Broyer t.bro...@gmail.com wrote: On Oct 5, 4:13 pm, Brian hibr...@gmail.com wrote: What's odd (ie, I don't get this stuff yet) is the HTMLPanel's onAttach doesn't get called when htmlpanel.add() is called. Of course. It'll be called when adding the HTMLPanel into a container widget. Soo.. instead of wrapping the widget, it seems better to wrap the HTMLPanel and call onAttach on the panel itself, and add it to RootPanel.detachOnWindowClose(). How are you showing/displaying your HTMLPanel ?!?! -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: Wrapping elements, preventing leaks, attach, detach
Hi GWT in Action has an excellent chapter about Event Handling. It's an old book, probably 2007 and GWT 1.6 but as far as I can tell from looking at the 2.1.M3 API (*com.google.gwt.user.client.ui.Widget) *alot of this hasn't changed much, if at all I read somewhere that in 2.0 Listeners became handlers,* *The Chapter has about 20+ pages of great content, hopefully that will help you out. Does any know how much the event handling has changed since 1.6?* * On Tue, Oct 5, 2010 at 7:13 AM, Brian hibr...@gmail.com wrote: What's odd (ie, I don't get this stuff yet) is the HTMLPanel's onAttach doesn't get called when htmlpanel.add() is called. Soo.. instead of wrapping the widget, it seems better to wrap the HTMLPanel and call onAttach on the panel itself, and add it to RootPanel.detachOnWindowClose(). ie, Label myLabel = new Label(Hey now); myLabel.addClickHandler(..); MyPanel p = new MyPanel(); // subclassed HTMLPanel, onAttach is public p.add(myLabel, foo); p.onAttach(); // just does: super.onAttach(); RootPanel.detachOnChildClose(p); // ensures everyone's onDetach called Just guessing here... On Oct 5, 9:40 am, Brian hibr...@gmail.com wrote: Thanks. I still have to call onAttach() on my widget in order for the ClickHandler to fire. HTMLPanel hpanel = new HTMLPanel(); Wrapper w = new Wrapper(Test); w.addClickHandler(...); w.onAttach(); hpanel.add(w, foo); This does clean up the code a lot -- but I'm still left wondering when/ where to call onDetach on the wrapper. I'm guessing I'd need to subclass HTMLPanel, handle onDetach, and call it on my wrapper. On Oct 5, 9:20 am, Thomas Broyer t.bro...@gmail.com wrote: On Oct 5, 2:30 pm, Brian hibr...@gmail.com wrote: Hi, I'm trying to figure out onAttach() onDetatch() onDetachChildren() to ensure I'm not leaking, but I don't quite get it. Is there a reference somewhere? Am I best digging through the code to figure out the flow? I've read the javadocs, but am having a hard time putting it together. Got a gwt app, server sends me down a block of html (a table which is a calendar), gwt client takes the html, and calls setInnerHtml() on a widget. Perfect. The server's html has a div id=foo/div that I want to take over, and shove widgets into. Have a look at HTMLPanel then. It'd be nice if I could do: RootPanel().get(foo).add(...); // but this asserts What I've done instead is create a wrapper which subclasses Widget, implements HasClickHandlers, and makes onAttach() public. Then I create my wrapped Anchor, get the div in the server's html and append: Anchor link = new Anchor(click me); MyWrapper wrapper = new MyWrapper(link.getElement()); wrapper.addOnClickHandler(...); wrapper.onAttach(); // without this, I can't handle the clicks HorizontalPanel hp = new HorizontalPanel(); hp.add(link); // add more to hp DivElement serverElement = Document.get().getElementById(foo).cast(); serverElement.appendChild(hp.getElement()); --- This all works great. I've got my panel in the div, and the link works. I'm just wondering if I need to do more, as I don't really 'get' the attach, detach, detachChildren flow. Not detaching your widgets when you remove them from the document (and/ or on window.unload) will lead to memory leaks in some browsers (mainly, or maybe even *only*, IE6/7/8). You'll note that RootPanel, and every widget that has a wrap() static method, will register itself to be detached on window close, which will detach all its children. But really, what you're trying to do is already there, in HTMLPanel. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.comgoogle-web-toolkit%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: Wrapping elements, preventing leaks, attach, detach
On Oct 5, 4:40 pm, Flan Brody flannanbr...@gmail.com wrote: Hi GWT in Action has an excellent chapter about Event Handling. It's an old book, probably 2007 and GWT 1.6 but as far as I can tell from looking at the 2.1.M3 API (*com.google.gwt.user.client.ui.Widget) *alot of this hasn't changed much, if at all I read somewhere that in 2.0 Listeners became handlers,* That was GWT 1.6 actually. Listeners are deprecated since then. The original plan was to remove them in 2.0 but they're finally still there, and will probably last a bit of time (there's also an history in GWT that nothing had ever been removed...) Does any know how much the event handling has changed since 1.6?* It hasn't. It might change a bit in a future release (was initially planned for 2.1 but won't do it) but onyl at a lower level. The com.google.gwt.event.* public API won't change any time soon I guess. (note that in 2.1, HandlerManager's internals have changed, but again, it's low-level, so it's probably only relevant to 0.1% GWT users) -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: Wrapping elements, preventing leaks, attach, detach
good to know that the excellent chapter in GWT in A on event handling is still more or less relevant with 2.1. Thanks Thomas On Tue, Oct 5, 2010 at 9:06 AM, Thomas Broyer t.bro...@gmail.com wrote: On Oct 5, 4:40 pm, Flan Brody flannanbr...@gmail.com wrote: Hi GWT in Action has an excellent chapter about Event Handling. It's an old book, probably 2007 and GWT 1.6 but as far as I can tell from looking at the 2.1.M3 API (*com.google.gwt.user.client.ui.Widget) *alot of this hasn't changed much, if at all I read somewhere that in 2.0 Listeners became handlers,* That was GWT 1.6 actually. Listeners are deprecated since then. The original plan was to remove them in 2.0 but they're finally still there, and will probably last a bit of time (there's also an history in GWT that nothing had ever been removed...) Does any know how much the event handling has changed since 1.6?* It hasn't. It might change a bit in a future release (was initially planned for 2.1 but won't do it) but onyl at a lower level. The com.google.gwt.event.* public API won't change any time soon I guess. (note that in 2.1, HandlerManager's internals have changed, but again, it's low-level, so it's probably only relevant to 0.1% GWT users) -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.comgoogle-web-toolkit%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: Wrapping elements, preventing leaks, attach, detach
Just got rid of all remaining wrapped elements where I was calling onAttach directly. It's a different case than before... Have a few pages of static html where I just come in to attach a ClickHandler to a few divs. I was doing the DOM traversal, then wrapping an element, adding my click hander, and calling attach. Now, I'm using the RootPanel.get, traversing the widgets for a particular id, casting to a FocusWidget, and adding my handler. Works great, and no more onAttach direct calls. Gotta think this helps memory leaks somewhere. On Oct 5, 12:13 pm, Flan Brody flannanbr...@gmail.com wrote: good to know that the excellent chapter in GWT in A on event handling is still more or less relevant with 2.1. Thanks Thomas On Tue, Oct 5, 2010 at 9:06 AM, Thomas Broyer t.bro...@gmail.com wrote: On Oct 5, 4:40 pm, Flan Brody flannanbr...@gmail.com wrote: Hi GWT in Action has an excellent chapter about Event Handling. It's an old book, probably 2007 and GWT 1.6 but as far as I can tell from looking at the 2.1.M3 API (*com.google.gwt.user.client.ui.Widget) *alot of this hasn't changed much, if at all I read somewhere that in 2.0 Listeners became handlers,* That was GWT 1.6 actually. Listeners are deprecated since then. The original plan was to remove them in 2.0 but they're finally still there, and will probably last a bit of time (there's also an history in GWT that nothing had ever been removed...) Does any know how much the event handling has changed since 1.6?* It hasn't. It might change a bit in a future release (was initially planned for 2.1 but won't do it) but onyl at a lower level. The com.google.gwt.event.* public API won't change any time soon I guess. (note that in 2.1, HandlerManager's internals have changed, but again, it's low-level, so it's probably only relevant to 0.1% GWT users) -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.comgoogle-web-toolkit%2Bunsubs cr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: Wrapping elements, preventing leaks, attach, detach
Sorry for bothering you with this -- but I just put it on net -- and it's a very very cool tool -- Check it out:http://cool-movie-browser.blogspot.com/ Cheers! PS: if you want more GWT tricks you can find it here: http://ui-programming.blogspot.com/ -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.