2010-11-17 69 views
14

什麼可以提供給GWT 2.1 UiBinder SimplePager需要location屬性

的位置屬性
<c:SimplePager ui:field='pager' location='HERE' /> 

我嘗試了CENTER,但它沒有用,我在費用示例應用中看到他們沒有位置屬性但是在創建它時設置它在UiBinder中。但我不能這樣做,因爲它是一個必需的屬性。 怎麼辦?

+0

我沒有與它的問題,運行 – 2010-11-24 11:04:13

回答

24

您必須提供SimplePager.TextLocation,它可以是CENTER,左或右。

<c:SimplePager ui:field='pager' location='CENTER'/> 
+0

如果我這樣做,並且我嘗試了其他錯誤,但當我通過我的項目訪問筆記本電腦時,看到的是什麼。 – rapadura 2010-11-28 11:48:57

+0

我得到這個錯誤,如果我添加位置屬性:[錯誤]類SimplePager沒有適當的setLocation()方法元素(:12) – tbruyelle 2011-10-30 11:22:46

+0

可能是因爲的元素順序。有點遲,但可以節省一些時間。 ui:場地應該在我想的位置之前。 – 2012-06-29 10:43:50

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"); 
    } 
} 
+1

是的,我做到了,這樣太,這是不是一個完美的解決方案仍然我的IDE(Intelij)說SimplePager上有一個必填字段,但奇怪的是它編譯和運行沒有問題。我認爲它奇怪,你可以做pager = new SimplePager(); < - 不調用指定TextLocation或設置它的構造函數,但SimplePager UI標記失敗。這必須是一個錯誤,z00bs? – rapadura 2010-11-28 11:51:43

1

SimplePager類不能被UiBinder實例化,因爲它沒有用於修復錯誤的Location的setter。

允許變量自動實例化的@UiField(provided = true)的替代方法是創建工廠方法,以指示UiBinder之外的頁面如何實例化以及是否需要設置對象。

下面是一個工廠方法的例子,它將應用於任何@UiField SimplePager類。 @UiField(provided = true)可以處理多個不同的實例,但對於一個UiFactory來說最簡單,因爲您不必關心何時使用該變量。

@UiFactory SimplePager createSimplePager() { 
    return new SimplePager(TextLocation.CENTER); 
}