我最近跳进了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)
我这样做是错误的吗?或者是否存在某种原因/细节,我为什么会这样实现?
答案 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);