15

可以为位置属性提供什么

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

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

4

3 回答 3

24

您必须提供SimplePager.TextLocation,可以是 CENTER、LEFT 或 RIGHT。

<c:SimplePager ui:field='pager' location='CENTER'/>
于 2010-11-23T20:55:30.287 回答
5

我目前看到的唯一解决方案是使用@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");
    }
}
于 2010-11-23T15:47:01.190 回答
1

SimplePager 类不能被 UiBinder 实例化,因为它没有用于 Location 的设置器来修复错误。

@UiField(provided=true) 的替代方法是允许自动实例化变量,它是通过创建工厂方法来指示 UiBinder 外部的页面如何实例化以及在需要时设置对象。

下面是一个工厂方法示例,它将应用于任何 @UiField SimplePager 类。@UiField(provided=true) 将处理多个不同的实例化,但对于一个 UiFactory 是最简单的,因为您不必关心何时使用变量。

@UiFactory SimplePager createSimplePager() {
    return new SimplePager(TextLocation.CENTER);
}
于 2014-05-01T20:00:06.677 回答