@UiChild需要额外的“addChildObject”XML标签吗?

时间:2013-10-15 16:42:47

标签: xml gwt uibinder

我最近跳进了GWT并且对它很满意。

@UiChild很好,因为它允许我们以编程方式添加子元素以及它们在UIBinder ui.xml中的表示。

然而,我发现了一些看起来非常臃肿的东西。

所以,当我第一次遇到@UiChild时,我认为它会像这样工作。

<g:FlowPanel>           
        <c:CustomWidget customWidgetParameter="I am a 
parameter"ui:field="customFieldMappingName"/>                                   
</g:FlowPanel>

@UiChild(tagname ="CustomWidget" )
     public void addCustomWidget(CustomWidget cw) 

干净整洁。我认为GWT会寻找任何“CustomWidget”标签。 然而,经过研究,我发现我必须做这样的事情。

<g:FlowPanel>
    <c:addCustomWidget>
        <c:CustomWidget customWidgetParameter="I am a parameter"
            ui:field="customFieldMappingName"/>         
    </c:addCustomWidget>
</g:FlowPanel>

@UiChild(tagname ="addCustomWidget" )
     public void addCustomWidget(CustomWidget cw) 

我这样做是错误的吗?或者是否存在某种原因/细节,我为什么会这样实现?

1 个答案:

答案 0 :(得分:2)

不确定这是否是原因,但您可以有多个@UiChild定义。 可能GWT不使用类型信息,只使用标记名来检查要调用的函数:

<gui:MyCustomContainer>
   <gui:myHeader>
      <g:SomeWidget>
   </gui:myHeader>
   <gui:myContent>
      <g:SomeWidget>
   </gui:myContent>
</gui:MyCustomContainer>

在你的MyCustoContainer课程中:

@UiChild(tagname="myHeader")
public void addHeader(Widget widget);

@UiChild(tagname="myContent")
public void addContent(Widget widget);