如何在不向DOM添加DIV的情况下创建GWT Composite小部件



如果我使用UIBinder创建一个复合小部件,然后在代码中使用我创建的小部件,它会在我的小部件周围插入一个额外的<div>元素。有没有办法消除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>

编辑DIV似乎是由<g:HTMLPanel> 创建的

是的,div是由HTML面板创建的。你可以删除HTMLPanel,但你必须将绑定类型更改为Element,你将无法再将其用作复合。在这种情况下,我会做以下事情:
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>

部分回答显然,<g:HTMLPanel>生成div,并且可以通过使用标签属性进行控制

<g:HTMLPanel tag="span">
    <!-- your stuff -->
</g:HTMLPanel>

来源:试图让UIBinder给我一个跨度而不是div

这并不能完全解决我的需求,因为我想消除DIV(使用HTMLPanel的替代方案?)或能够与它交互(添加类等)。

相关内容

最新更新