2012-01-11 63 views
2

如果我使用UIBinder創建一個Composite Widget,那麼使用我創建的代碼中的小部件,它會在我的小部件周圍插入額外的<div>元素。有沒有辦法消除div或控制它是什麼樣的元素?如何在不向DOM添加DIV的情況下創建GWT複合控件?

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> 

編輯 看來,正在被<g:HTMLPanel>

回答

3

是,正在由HTML面板創建div創建的DIV。您可以刪除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> 
+0

我爲了這個問題簡化了我的例子,而不是隻有一個標籤,我有幾個字段,如果它不是複合材料,我還能夠擁有多個字段嗎? – checketts 2012-01-12 00:10:50

+0

只要你不使用小部件(只有com.google.gwt.dom.client。*元素),是的;顯然你仍然需要一個容器元素。 – 2012-01-12 12:54:49

+0

是的;你可以在那裏獲得所有你想要的HTML,你不能添加一個小部件,這就是HTML面板的用途,因爲它處理了小部件的邏輯綁定。如果你自己處理邏輯綁定,你可以將小部件的元素插入到你的html中,但你基本上會重寫很多HTMLPanel綁定邏輯。 – LINEMAN78 2012-01-12 21:18:20

1

部分答案 顯然,<g:HTMLPanel>產生的股利,並可以通過使用標籤屬性進行控制:

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

信用:Trying to get UIBinder to give me a span not a div

這並不能完全解決我的需求,因爲我想要消除DIV(使用HTMLPanel的替代方案?)或者能夠與它交互(以添加classe等等)。

相關問題