代码之家  ›  专栏  ›  技术社区  ›  rapadura

GWT 2.1 uibinder simplepager需要location属性

  •  15
  • rapadura  · 技术社区  · 15 年前

    可以为的位置属性提供什么

    <c:SimplePager ui:field='pager' location='HERE' /> 
    

    我尝试了Center,但它不起作用,我在费用示例应用程序中看到,他们没有位置属性,而是在uibinder中创建它。但我不能这样做,因为它是必需的属性。 怎么办?

    3 回复  |  直到 12 年前
        1
  •  24
  •   Peter Knego    15 年前

    你必须提供 SimplePager.TextLocation ,可以是中心、左或右。

    <c:SimplePager ui:field='pager' location='CENTER'/>
    
        2
  •  5
  •   z00bs    15 年前

    目前我看到的唯一解决办法是 @UiField(provided = true) . 不确定这是否有任何帮助,但请查看下面的小示例。

    UI.XML:

    <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
    <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"
        xmlns:c="urn:import:com.google.gwt.user.cellview.client">
        <ui:style>
    
        </ui:style>
        <g:HTMLPanel>
            <c:CellList ui:field="list" />
            <c:SimplePager ui:field="pager" />
            <g:Button ui:field="more" text="addMore" />
        </g:HTMLPanel>
    </ui:UiBinder>
    

    小部件:

    public class TestView extends Composite {
    
        private static TestViewUiBinder uiBinder = GWT.create(TestViewUiBinder.class);
    
        interface TestViewUiBinder extends UiBinder<Widget, TestView> {}
    
        @UiField(provided = true)
        CellList<String> list;
        @UiField(provided = true)
        SimplePager pager;
        @UiField
        Button more;
        private int counter = 0;
        private ListDataProvider<String> provider;
    
        public TestView() {
            list = new CellList<String>(new TextCell());
            pager = new SimplePager();
            initWidget(uiBinder.createAndBindUi(this));
            provider = new ListDataProvider<String>(getList());
            provider.addDataDisplay(list);
            pager.setDisplay(list);
            pager.setPageSize(5);
        }
    
        private LinkedList<String> getList() {
            LinkedList<String> list = new LinkedList<String>();
            list.add("1st");
            list.add("2nd");
            list.add("3rd");
            list.add("4th");
            list.add("5th");
            return list;
        }
    
        @UiHandler("more")
        void onMoreClick(ClickEvent event) {
            provider.getList().add(++counter + " more");
        }
    }
    
        3
  •  1
  •   Timothy Gonzalez    12 年前

    simplepager类不能由uibinder实例化,因为它没有用于修复错误的位置的setter。

    @uifield(provided=true)允许自动实例化变量的另一种方法是创建一个工厂方法,指示uibinder外部的页面如何实例化以及如果需要,设置对象。

    下面是工厂方法的一个示例,它将应用于任何@uifield simplepager类。@uifield(provided=true)可以处理多个不同的实例化,但对于一个uifactory来说,这是最简单的,因为在使用变量时不必担心。

    @UiFactory SimplePager createSimplePager() {
        return new SimplePager(TextLocation.CENTER);
    }
    
    推荐文章