代码之家  ›  专栏  ›  技术社区  ›  Julio Faerman

如何使用uibinder创建带有子级的GWT复合组件?

  •  17
  • Julio Faerman  · 技术社区  · 14 年前

    我想创建一个组件来装饰它的子组件,例如:

    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中,如果必须的话)

    2 回复  |  直到 11 年前
        1
  •  33
  •   z00bs    14 年前

    MyComponent 实施 HasWidgets 用于添加/删除子部件的接口。

    这个 MyComponent.ui.xml 看起来很简单

    <g:FlowPanel ui:field="main" />
    

    委托指定的ind方法时 HasWIDGET 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>
    

    这样就行了。

        2
  •  1
  •   Peter Knego    14 年前

    使用此XML:

    <myapp:mycomponent>
        <g:Label>Decorated child</g:Label> 
    </myapp:mycomponent>
    

    将实例化 MyComponent 然后打电话 MyComponent.add(label) . 你所要做的就是超越 .add(..) 在你们班 肌力成分 并应用要传递组件的任何样式。