Как зарегистрировать пользовательский HTML-элемент в качестве виджета в GWT

Привет, ребята Кто-нибудь знает, как зарегистрировать пользовательский элемент html как виджет GWT uiBinder и использовать его непосредственно вместо использования в HTMLPanel.

Например, если я использую Google Polymer в своем проекте mgwt, я использую пользовательский элемент html как

<g:HTMLPanel > <paper-shadow class="{style.card}"> <mgwt:touch.TouchPanel ui:field="touchPanel"> <mgwt:panel.flex.FlexPanel orientation="VERTICAL" alignment="CENTER"> <g:Image url="{global.getDirection.getSafeUri.asString}" /> <g:HTMLPanel>Take me to Deal</g:HTMLPanel> </mgwt:panel.flex.FlexPanel> </mgwt:touch.TouchPanel> </paper-shadow> </g:HTMLPanel> 

Я хочу зарегистрировать / создать бумажную тень в качестве пользовательского виджета, чтобы я мог писать код так, чтобы его легко переносимые события

  <polymer:paper-shadow class="{style.card}"> <mgwt:touch.TouchPanel ui:field="touchPanel"> <mgwt:panel.flex.FlexPanel orientation="VERTICAL" alignment="CENTER"> <g:Image url="{global.getDirection.getSafeUri.asString}" /> <g:HTMLPanel>Take me to Deal</g:HTMLPanel> </mgwt:panel.flex.FlexPanel> </mgwt:touch.TouchPanel> <polymer:paper-shadow> 

Solutions Collecting From Web of "Как зарегистрировать пользовательский HTML-элемент в качестве виджета в GWT"

Насколько я знаю, вы не можете легко добавить новый пользовательский элемент, который будет понимать UiBinder. Однако вы можете добавить его к своему пользовательскому виджету .

Вы заметите, что GWT позволяет настраивать атрибуты для этих настраиваемых элементов, например, в DockLayoutPanel :

 <g:DockLayoutPanel unit='EM'> <g:north size='5'> <g:Label>Top</g:Label> </g:north> <g:center> <g:Label>Body</g:Label> </g:center> <g:west size='192'> <g:HTML> <ul> <li>Sidebar</li> <li>Sidebar</li> <li>Sidebar</li> </ul> </g:HTML> </g:west> </g:DockLayoutPanel> 

Обратите внимание на элемент <g:north size='5'> – если вы посмотрите на исходный код DockLayoutPanel , вы увидите, что он обрабатывается с помощью этого метода:

 public void addNorth(Widget widget, double size) { insert(widget, Direction.NORTH, size, null); } 

Нет аннотации @UiChild и дополнительного параметра означает, что за сценой происходит нечто «волшебное». И действительно, существует класс DockLayoutPanelParser который обрабатывает этот специальный случай. Вы заметите, что он реализует ElementParser – к сожалению, невозможно «подключить» ваш собственный ElementParser .

Был проект gwt-customuibinder , который попытался обойти это ограничение, но он устарел для более новых версий (2.5+?) GWT:

Обратите внимание, что с новыми версиями GWT этот проект теперь устарел, поскольку многие из методов, используемых для добавления собственных парсеров элементов в UiBinder, теперь невозможны.

Я использую и поддерживаю эту вилку этой упаковки gwt-polymer .

В тестовом приложении вы можете увидеть несколько примеров использования полимерных виджетов в gwt, как обернуть существующие элементы html-полимера, как создать новые, использовать с uibinder и т. Д.