我想创建一个组件来装饰其子级,例如:
mycomponent.ui.xml:
<g:FlowPanel addStyleNames="myStyle"> <!-- how can i render children ? --> </g:FlowPanel>
然后其他人可以使用:
<myapp:mycomponent> <g:Label>Decorated child</g:Label> </myapp:mycomponent>
如何在uibinder中渲染孩子?(或者在Java中,如果我必须的话)
让我们MyComponent实现HasWidgets用于添加/删除子窗口小部件的接口。
MyComponent
HasWidgets
在MyComponent.ui.xml外观一样简单
MyComponent.ui.xml
<g:FlowPanel ui:field="main" />
在将ind指定的方法委托HasWidgets给时FlowPanel:
FlowPanel
public class MyComponent extends Composite implements HasWidgets { private static MyComponentUiBinder uiBinder = GWT.create(MyComponentUiBinder.class); interface MyComponentUiBinder extends UiBinder<Widget, MyComponent> {} @UiField FlowPanel main; public MyComponent() { initWidget(uiBinder.createAndBindUi(this)); } @Override public void add(Widget w) { main.add(w); } @Override public void clear() { main.clear(); } @Override public Iterator<Widget> iterator() { return main.iterator(); } @Override public boolean remove(Widget w) { return main.remove(w); } }
呼唤
<M:MyComponent> <g:Label text="some text" /> </M:MyComponent>
将以这种方式工作。