Как добавить пользовательский виджет к элементу
GWT RootPanel.get( "id" ) не возвращает мне теги div, которые встроены в элементы HTML.
ех.
& Л; тело > < & таблицы GT; < & тр GT; < & тд GT; < div id = "x" / > <td> ...</table> ...
Как получить доступ к этому тегу div и "Добавить виджет".
Одна из вещей, которую я пробовал, заключалась в том, чтобы получить элемент из виджета или widget.getElement() и добавить это к добавлению этого элемента к элементу, полученному из DOM.getElementById().
Виджет добавляется, однако все щелчки мыши теряются, а виджет больше не отвечает. Виджет представляет собой составной элемент меню, поэтому щелчки мыши вызывают падение пункта меню, но он просто выбирает текст.
Ответы
Ответ 1
Если по "HTML-элементу" в вашем первом предложении вы действительно имеете в виду "HTML-виджет", вместо этого вы должны использовать виджет HTMLPanel, а затем просто используйте его метод add(Widget,String)
или add(Widget,Element)
, чтобы добавить ваш виджет в существующую суб-элемент.
Если вы действительно говорите о том, что "виджет с существующим родительским виджетам не может быть добавлен в сообщение об отставке", тогда, начиная с GWT 2.3, теперь вы можете обернуть существующий элемент DOM в HTMLPanel, а затем использовать те же методы add
, как указано выше:
HTMLPanel container = HTMLPanel.wrap(Document.get().getElementById("container"));
Ответ 2
Ваш подход с DOM.getElementById()
является правильным. Виджеты GWT создают дерево объектов параллельно DOM, поэтому вам нужно дополнительно "привязать" это дерево объектов к DOM для получения событий. Это делается с помощью метода onAttach()
.
К сожалению, этот метод protected
, поэтому вы не можете его напрямую вызвать. Обходной путь состоит в том, чтобы создать простой класс оболочки Widget и сделать его общедоступным:
public void onAttach() {
super.onAttach();
}
Обратите внимание, что вы должны убедиться, что Widget отсоединен, когда он больше не показан, поскольку это не может привести к утечке памяти. Самый простой способ сделать это - вызвать RootPanel.detachOnWindowClose(widget)
.
Update:
Как сказал Томас Бройер (и его слова следует рассматривать как "источник" ) - используйте HTMLPanel.wrap(yourDivElement)
, так как это будет правильно делать то, что вам нужно для этого - присоединить виджет к дереву DOM.
Мой предложенный подход хакерский, и я бы рекомендовал его, только если вы на самом деле пишете новый виджет (как мне нужно было сделать в одном из моих проектов и скопировать мой код здесь).