1

我最近加入了 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) 

我这样做是错误的吗?或者我是否缺少某种原因/微小的细节来说明为什么它会这样实现?

4

1 回答 1

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);
于 2013-10-16T14:50:40.740 回答