Great thanks for all the options. I'll have a look into them all but doesn't seem like there is any particularly 'clean' method. HTMLPanel having a wrap method as part of GWT sounds nice though.
And yeah my WidgetUtils.attach() method is already as you say :), code posted was 'working out' code. On May 7, 6:23 pm, Thomas Broyer <[email protected]> wrote: > On 7 mai, 06:32, David Terei <[email protected]> wrote: > > > > > > > I have a project using GWT which integrates with existing HTML. I want > > to be able to place widgets into the page by retrieving HTML elements > > with specific ID's and inserting the widget as a child. > > > In 1.5 I just used: > > > RootPanel.get(id).add(widget); > > > However I found as many people did once upgrading to 1.6 that this > > isn't a good way as nested elements cause problems. So I'm trying to > > figure out how this should be done. Simple DOM manipulation gets the > > widget in the right place and displaying properly but doesn't setup > > any of its event handlers properly. > > > I have two solutions at the moment, although neither are ideal: > > > Solution 1: > > Add the widget to the root panel and then moves it via DOM > > manipulation to be a child of its hook element. > > > RootPanel.get().add(widget); > > widget.getElement().getParentElement().removeChild(widget.getElement > > ()); > > DOM.getElementById(id).appendChild(widget.getElement()); > > > Solution 2: > > Attach via DOM, fix events by calling onAttach via proxy class to get > > around onAttach being protected. > > > DOM.getElementById(id).appendChild(w.getElement()); > > WidgetUtils.WidgetOnAttach(w); > > I'd rather make a WidgetUtils.attach() method: > public static void attach(Widget widget, String id) { ... } > > > WidgetUtils Class: > > > package com.google.gwt.user.client.ui; > > You could also use JSNI, this allows calling the protected method > without the need for WidgetUtils to be in the c.g.g.u.client.ui > package. > > > public class WidgetUtils { > > public static void WidgetOnAttach(Widget w) { > > w.onAttach(); > > Don't forget to call RootPanel.detachOnWindowClose() or you'll > probably face memory leaks wrt event handlers. See for example how the > Anchor.wrap(...) method is > implemented:http://code.google.com/p/google-web-toolkit/source/browse/releases/1.... > > > Both these methods seem to work fine, have tried both by converting > > all my old 1.5 RootPanel.get(id).add(widget) calls to both of these > > methods under 1.6 and all tests have passed. However, both are > > somewhat of a hack and I seeing if there is a better way. > > You could copy (part of) the code from HTMLPanel and add a wrap() > method to it; you'd then wrap() the document's body (or a "root > element" for your app) and use add(Widget,String) the way I proposed > above with WidgetUtils. > (and/or you could file a bug to add a wrap() method to HTMLPanel) > > ...or you could "just" use JSNI to call the protected add > (Widget,Element) method on a RootPanel (that's what HTMLPanel.add > (Widget,String) does after having "resolved" the id into an Element) > > http://code.google.com/p/google-web-toolkit/source/browse/releases/1.... --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~----------~----~----~----~------~----~------~--~---
