我想创建一个组件来装饰它的子节点,例如:
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中,如果必须的话)
答案 0 :(得分:33)
让MyComponent
实现HasWidgets
界面以添加/删除子窗口小部件。
MyComponent.ui.xml
看起来像
<g:FlowPanel ui:field="main" />
将您指定的方法HasWidgets
委托给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>
将以这种方式工作。
答案 1 :(得分:1)
使用此XML:
<myapp:mycomponent>
<g:Label>Decorated child</g:Label>
</myapp:mycomponent>
将实例化MyComponent
,然后调用MyComponent.add(label)
。您所要做的就是覆盖班级.add(..)
中的MyComponent
并应用您要传递组件的任何样式。