2012-05-13 11 views
7

Có ai có hoặc biết ví dụ minh họa dữ liệu tải thông qua cuộc gọi RPC GWT vào một ListStore sử dụng Sencha GXT 3.0? Tôi biết có rất nhiều ví dụ về việc sử dụng các giao diện ModelData và BeanModel được sử dụng trong các phiên bản 2.x nhưng 3.0 không cần sử dụng các giao diện này và được cho phép cho các đối tượng POJO được nạp trong việc sử dụng các lớp thực hiện giao diện ValueProperty.Ví dụ đơn giản để tải dữ liệu vào một Sencha GXT (3.0) ListStore bằng cách sử dụng một cuộc gọi GWT RPC?

Tôi đã thấy ví dụ RequestFactoryBinding và ví dụ về Grid RequestFactory trong 3.0 Explorer nhưng những thông tin này xuất hiện để chứng minh việc sử dụng Proxy dữ liệu tùy chỉnh và Người nhận. Tôi giả sử xem xét mã trong các ví dụ đó rằng các kỹ thuật/lớp học này có thể được yêu cầu nhưng điều đó không được thực hiện rõ ràng ở bất kỳ đâu. Có thể có nhiều tài liệu sắp tới nhưng cho tới giờ tôi vẫn chưa tìm thấy được nhiều thứ vượt quá javadocs và Explorer mà thiếu một số lớp nguồn được sử dụng trong các phương thức ví dụ.

Liên kết đến cả hai ví dụ bên dưới.

Các RequestFactoryBinding Ví dụ: http://www.sencha.com/examples/#ExamplePlace:requestfactorybinding

RequestFactory Lưới dụ: http://www.sencha.com/examples/#ExamplePlace:requestfactorygrid

Trả lời

8

DataProxyLoader được sử dụng chủ yếu để tạo điều kiện a) dựa trên máy chủ để lọc/phân trang/phân loại, hoặc b) tái sử dụng giữa các phần của ứng dụng để truy cập vào cùng một phần dữ liệu. Chúng không bắt buộc (như trong 2.x) trong trường hợp khách hàng chỉ tải dữ liệu một lần hoặc nơi quản lý cửa hàng thủ công được thực hiện.

Các lớp tải cửa hàng khác nhau (ListStoreBinding, LoadResultListStoreBinding) chứng minh nội bộ cách thức mà ListStore có thể được cấp các mục. Cách thứ nhất này cho phép bạn thay thế các mặt hàng hiện có trong cửa hàng từ phương pháp onSuccess trong callback RPC của bạn hoặc nhận RequestFactory:

List<MyData> newItems = ...;//response from server 
ListStore<MyData> store = ...;//current store to replace/update 
store.replaceAll(newItems); 

Nếu chỉ nạp một lần, hoặc chỉ phụ thêm, không thay thế, phương pháp khác nên được sử dụng :

store.addAll(newItems); 

mục có thể được thêm vào từng người một bằng store.add, tuy nhiên điều này sẽ dẫn đến một sự kiện mỗi mục, và nên tránh.

Chỉnh sửa: Ngoài ra, và điều này có thể không hoàn toàn rõ ràng đến từ 2.x, nhưng không yêu cầu siêu lớp/giao diện cho chính dữ liệu. ValueProvider chỉ được sử dụng như một sự trừu tượng bên ngoài cho các mô hình được thao tác như thế nào - các giá trị được đọc hoặc đặt chung từ bất kỳ kiểu mô hình nào. Giao diện PropertyAccess cho phép các trường hợp ValueProvider (và khác) được tạo ra chỉ bằng tên thuộc tính mà các giá trị sẽ nhận được/thiết lập từ việc sử dụng các trình truy cập bean. Các kiểu/các cá thể ValueProvider không bắt buộc để tải dữ liệu, chỉ đơn thuần là cho các tiện ích dữ liệu tự trích xuất dữ liệu mà chúng đang hiển thị và thực hiện các sửa đổi sau khi người dùng chỉnh sửa các giá trị.


Biết những phần này, cơ chế nạp/proxy sẽ tải dữ liệu theo cùng một cách cơ bản. Trình tải chịu trách nhiệm cho việc cài đặt (phân trang, lọc và/hoặc sắp xếp) để sử dụng khi tải, sau đó kích hoạt các lớp con khác nhau có các trách nhiệm khác nhau, chấp nhận các loại cấu hình tải khác nhau và trả về các kết quả khác nhau.DataProxy sau đó là cơ chế thực sự nói chuyện với bất cứ thứ gì giữ dữ liệu, không đồng bộ nếu trên một máy chủ và thông báo cho bộ nạp khi các kết quả có sẵn thông qua một cuộc gọi lại.

Các ví dụ được liệt kê trong câu hỏi đều sử dụng RequestFactory, nhưng có một số ví dụ cũng rằng việc sử dụng RPC, và một vài tải từ JSON hay XML. Trong http://www.sencha.com/examples/#ExamplePlace:paginggrid những phần dữ liệu tải chính như sau:

// The rpc async instance 
final ExampleServiceAsync service = GWT.create(ExampleService.class); 

// As in Ext GWT 2, there is a convenience proxy for RPC to just pass the callback 
// directly to the RPC call. If you need a custom callback, just be sure to invoke 
// `callback.onSuccess` with the final result. 
RpcProxy<PagingLoadConfig, PagingLoadResult<Post>> proxy = new RpcProxy<PagingLoadConfig, PagingLoadResult<Post>>() { 
    @Override 
    public void load(PagingLoadConfig loadConfig, AsyncCallback<PagingLoadResult<Post>> callback) { 
    service.getPosts(loadConfig, callback); 
    } 
}; 
// ... 

// The loader itself has a reference to the proxy so that loader.load() results 
// in a round trip to the server, as outlined above. 
final PagingLoader<PagingLoadConfig, PagingLoadResult<Post>> loader = new PagingLoader<PagingLoadConfig, PagingLoadResult<Post>>(
    proxy); 
loader.setRemoteSort(true); 

// This last piece - instead of 2.x where the loader is a parameter to the store, 
// in 3 you directly wire the results of the loader to add the items into the 
// store, as discussed in the first half of this answer 
loader.addLoadHandler(new LoadResultListStoreBinding<PagingLoadConfig, Post, PagingLoadResult<Post>>(store)); 
+0

Cảm ơn, nhưng có lẽ tôi đã không từ câu hỏi của tôi tốt. Tôi quen thuộc với việc sử dụng các cửa hàng và thêm/gỡ bỏ các mục từ họ nhưng tôi đã không thể tìm thấy một ví dụ rõ ràng về quá trình tải bằng cách sử dụng các đối tượng và giao diện 3.x. Tôi đã không thể tìm thấy một ví dụ sử dụng khả năng 3.x hoàn toàn để bắt đầu một yêu cầu dữ liệu qua RPC, nhận phản hồi và tải phản hồi vào một cửa hàng (RPC Call -> Response -> Loader -> Store -> Widget). –

+0

Xin lỗi, tôi nghĩ các ví dụ bạn liệt kê đã làm cho việc sử dụng bộ tải khá rõ ràng - Tôi sẽ cập nhật câu trả lời để giải thích việc sử dụng với bộ nạp. –

0

FWIW tôi tăng vọt một GWTP Dispatch version của một mạng lưới paged từ xa và sắp xếp. Đó là GWT RPC với một mô hình lệnh xoắn.

Giả sử bạn đã quen thuộc với lưới, bạn sẽ yêu cầu một thể hiện của:

  • RpcProxy
  • PagingLoader
  • LoadResultListStoreBinding

Và các phương pháp mà cần phải được viện dẫn:

  • PagingLoader.setRemoteSort(true)
  • PagingLoader.addLoadHandler()
  • Grid.setLoader()
  • PagingToolBar.bind()