Java 如何在不向DOM添加DIV的情况下创建GWT复合小部件?
如果我使用UIBinder创建一个复合小部件,然后在代码中使用我创建的小部件,它会在小部件周围插入额外的Java 如何在不向DOM添加DIV的情况下创建GWT复合小部件?,java,gwt,Java,Gwt,如果我使用UIBinder创建一个复合小部件,然后在代码中使用我创建的小部件,它会在小部件周围插入额外的元素。有没有办法消除div或控制它是什么类型的元素 public class ExamplePanel<T> extends Composite { @UiField LabelElement inputLabel; private static ExamplePanelUiBinder uiBinder = GWT.create(ExamplePanelUiBin
元素。有没有办法消除div或控制它是什么类型的元素
public class ExamplePanel<T> extends Composite {
@UiField LabelElement inputLabel;
private static ExamplePanelUiBinder uiBinder = GWT.create(ExamplePanelUiBinder.class);
interface ExamplePanelUiBinder extends UiBinder<Widget, ExamplePanel> { }
public ExamplePanel() {
initWidget(uiBinder.createAndBindUi(this));
}
}
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui">
<g:HTMLPanel>
<label ui:field="inputLabel">Label text</label>
</g:HTMLPanel>
</ui:UiBinder>
public类ExamplePanel扩展复合{
@UiField Labelement输入标签;
私有静态ExamplePanelUiBinder uiBinder=GWT.create(ExamplePanelUiBinder.class);
接口示例PanelUIBinder扩展UiBinder{}
公共示例面板(){
initWidget(uiBinder.createAndBindUi(this));
}
}
标签文本
编辑
看起来DIV是由
创建的。是的,DIV是由HTML面板创建的。您可以删除HTMLPanel,但必须将绑定类型更改为元素,并且您将无法再将其用作复合对象。在这种情况下,我将执行以下操作:
public class ExamplePanel extends Widget
{
private static ExamplePanelUiBinder uiBinder = GWT.create(ExamplePanelUiBinder.class);
interface ExamplePanelUiBinder extends UiBinder<Element, ExamplePanel>
{
}
@UiField LabelElement inputLabel;
public ExamplePanel()
{
setElement(uiBinder.createAndBindUi(this));
}
}
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder">
<label ui:field="inputLabel">Label text</label>
</ui:UiBinder>
public类示例面板扩展小部件
{
私有静态ExamplePanelUiBinder uiBinder=GWT.create(ExamplePanelUiBinder.class);
接口示例PanelUIBinder扩展UiBinder
{
}
@UiField Labelement输入标签;
公共示例面板()
{
setElement(uiBinder.createAndBindUi(this));
}
}
标签文本
是的,div是由HTML面板创建的。您可以删除HTMLPanel,但必须将绑定类型更改为元素,并且您将无法再将其用作复合对象。在这种情况下,我将执行以下操作:
public class ExamplePanel extends Widget
{
private static ExamplePanelUiBinder uiBinder = GWT.create(ExamplePanelUiBinder.class);
interface ExamplePanelUiBinder extends UiBinder<Element, ExamplePanel>
{
}
@UiField LabelElement inputLabel;
public ExamplePanel()
{
setElement(uiBinder.createAndBindUi(this));
}
}
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder">
<label ui:field="inputLabel">Label text</label>
</ui:UiBinder>
public类示例面板扩展小部件
{
私有静态ExamplePanelUiBinder uiBinder=GWT.create(ExamplePanelUiBinder.class);
接口示例PanelUIBinder扩展UiBinder
{
}
@UiField Labelement输入标签;
公共示例面板()
{
setElement(uiBinder.createAndBindUi(this));
}
}
标签文本
部分答案
显然,
会生成div,并且可以使用tag属性进行控制:
<g:HTMLPanel tag="span">
<!-- your stuff -->
</g:HTMLPanel>
学分:
这并不能完全解决我的需要,因为我想消除DIV(使用HTMLPanel的替代品?),或者能够与之交互(添加类等)。部分答案 显然,
会生成div,并且可以使用tag属性进行控制:
<g:HTMLPanel tag="span">
<!-- your stuff -->
</g:HTMLPanel>
学分:
这并不能完全解决我的需要,因为我想要消除DIV(使用HTMLPanel的替代品?)或者能够与之交互(添加类等)。为了这个问题,我简化了我的示例,而不仅仅是一个标签,我有几个字段,如果不是复合的,我还能有几个字段吗?只要你不使用小部件(只使用com.google.gwt.dom.client.*元素),是的;显然,您仍然需要一个容器元素;你可以把你想要的所有HTML都放在那里,你只是不能添加一个小部件,这就是HTML面板的作用,因为它处理小部件的逻辑绑定。如果您自己处理逻辑绑定,您可以将小部件的元素注入html,但实际上您将重写许多HTMLPanel绑定逻辑。为了解决这个问题,我简化了我的示例,而不仅仅是一个标签,我有几个字段,如果不是复合的,我还能有几个字段吗?只要你不使用小部件(只使用com.google.gwt.dom.client.*元素),是的;显然,您仍然需要一个容器元素;你可以把你想要的所有HTML都放在那里,你只是不能添加一个小部件,这就是HTML面板的作用,因为它处理小部件的逻辑绑定。如果您自己处理逻辑绑定,您可以将小部件的元素注入到html中,但实际上您将重写许多HTMLPanel绑定逻辑。