Ton*_*ark 7 java gwt android mgwt polymer
嗨大家有没有人知道如何将自定义html元素注册为GWT小部件uiBinder并直接使用它们代替在HTMLPanel中使用.
例如,如果我在我的mgwt项目中使用Google Polymer,我使用的是自定义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>
Run Code Online (Sandbox Code Playgroud)
我想注册/创建纸质阴影作为自定义小部件,以便我可以编写代码,以便它容易handel事件
<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>
Run Code Online (Sandbox Code Playgroud)
据我所知,您无法轻松添加 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>
Run Code Online (Sandbox Code Playgroud)
注意该<g:north size='5'>元素 - 如果您查看 的DockLayoutPanel源代码,您会发现它是由以下方法处理的:
public void addNorth(Widget widget, double size) {
insert(widget, Direction.NORTH, size, null);
}
Run Code Online (Sandbox Code Playgroud)
没有@UiChild注释和额外的参数意味着幕后正在发生一些“神奇”的事情。确实,有一个DockLayoutPanelParser类可以处理这种特殊情况。您会注意到它实现了ElementParser- 不幸的是,不可能“插入”您自己的ElementParser.
有一个项目gwt-customuibinder试图绕过这个限制,但它已被较新的(2.5+?)版本的 GWT 弃用:
请注意,随着 GWT 的新版本,该项目现已被弃用,因为许多用于将自定义元素解析器添加到 UiBinder 的技术现在已无法实现。