2010-11-17 28 views
14

gì có thể được cung cấp cho các thuộc tính vị trí của mộtGWT 2.1 UiBinder SimplePager đòi hỏi vị trí thuộc tính

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

Tôi tryed CENTER, nhưng nó didnt làm việc, tôi thấy trong các ứng dụng mẫu chi phí mà họ không có một thuộc tính vị trí mà thay vào đó, hãy tạo nó trong UiBinder. Nhưng tôi không thể làm điều đó vì nó là thuộc tính bắt buộc. Việc cần làm?

+0

Tôi đã có không có vấn đề với nó, chạy –

Trả lời

24

Bạn phải cung cấp SimplePager.TextLocation, có thể CENTER, sang trái hoặc phải.

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

Nếu tôi làm như thế này, và tôi đã thử tôi gặp một lỗi khác, tôi sẽ thấy khi tôi truy cập vào máy tính xách tay với dự án của tôi chính xác nó là gì. – rapadura

+0

Tôi gặp lỗi này nếu tôi thêm thuộc tính location: [ERROR] Lớp SimplePager không có phương thức setLocation() thích hợp Element (: 12) – tbruyelle

+0

Có thể vì thứ tự của các phần tử. Một chút phản ứng muộn nhưng có thể cứu ai đó một thời gian. ui: trường phải ở trước vị trí tôi nghĩ. –

5

Giải pháp duy nhất tôi thấy hiện tại đang làm việc với @UiField(provided = true). Không chắc chắn nếu đó là của bất kỳ sự giúp đỡ, nhưng hãy kiểm tra các ví dụ nhỏ dưới đây anyway.

Các 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> 

và widget:

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

Yep, tôi đã làm điều đó như thế này quá, mà không phải là một giải pháp thanh lịch và vẫn IDE của tôi (Intelij) nói rằng có một trường bắt buộc trên SimplePager, nhưng kỳ lạ nó biên dịch và chạy mà không có vấn đề gì. Tôi nghĩ rằng nó lạ mà bạn có thể làm pager = new SimplePager(); <- không gọi hàm tạo mà chỉ định TextLocation hoặc thiết lập nó, nhưng thẻ ui SimplePager không thành công. Điều này phải là một lỗi không nó, z00bs? – rapadura

1

Lớp SimplePager không thể được khởi tạo bởi UiBinder, bởi vì nó không có cài đặt vị trí để sửa lỗi.

Một thay thế cho @UiField (được cung cấp = true), cho phép biến được tạo tự động bằng cách tạo phương thức nhà máy để hướng dẫn trang bên ngoài UiBinder về cách khởi tạo và nếu cần thiết lập đối tượng.

Dưới đây là ví dụ về phương pháp nhà máy nó sẽ áp dụng cho bất kỳ lớp SimplePager @UiField nào. @UiField (được cung cấp = true) sẽ xử lý nhiều instantiations khác nhau, nhưng đối với một UiFactory là đơn giản nhất, bởi vì bạn không cần phải quan tâm đến khi biến được sử dụng.

@UiFactory SimplePager createSimplePager() { 
    return new SimplePager(TextLocation.CENTER); 
} 
Các vấn đề liên quan