DataProxy
これらは主にLoader
、a) フィルタリング/ページング/ソートをサーバーに依存すること、または b) 同じデータにアクセスするためにアプリケーションのパーツ間で再利用することを容易にするために使用されます。クライアントがデータを 1 回しかロードしない場合、または手動でストア管理が行われる場合は (2.x のように) 必要ありません。
さまざまなストア読み込みクラス ( ListStoreBinding
、LoadResultListStoreBinding
) は、ListStore にアイテムをフィードする方法を内部的に示しています。onSuccess
この最初の方法では、RPC コールバックまたは RequestFactory レシーバーのメソッドから、ストア内の既存のアイテムを置き換えることができます。
List<MyData> newItems = ...;//response from server
ListStore<MyData> store = ...;//current store to replace/update
store.replaceAll(newItems);
一度だけロードする場合、または追加するだけで置換しない場合は、別の方法を使用する必要があります。
store.addAll(newItems);
アイテムは を使用して 1 つずつ追加できますがstore.add
、これはアイテムごとにイベントが発生するため、避ける必要があります。
編集:また、これは2.xから完全に明確ではないかもしれませんが、データ自体にはスーパークラス/インターフェースは必要ありません。ValueProvider
モデルがどのように操作されるか、つまりどのような種類のモデルから値が一般的に読み取られるか、または設定されるかについての外部抽象化としてのみ使用されます。このPropertyAccess
インターフェースによりValueProvider
、値が Bean アクセサーを使用して取得/設定されるプロパティ名だけで (およびその他の) インスタンスを生成できます。ValueProvider のタイプ/インスタンスは、データの読み込みには必要ありません。データ ウィジェット自体が、表示されているデータを抽出し、ユーザーが値を編集した後に変更を加えるだけです。
これらの要素を知っていれば、ローダー/プロキシ メカニズムは同じ基本的な方法でデータをロードします。ローダーは、ロード時に使用する設定 (ページング、フィルタリング、および/またはソート) を通知され、ロードをトリガーします。異なるサブクラスには異なる責任があり、異なるロード構成タイプを受け入れ、異なる結果を返します。DataProxy は、サーバー上にある場合は非同期でデータを保持するものと実際に対話し、コールバックを介して結果が利用可能になったときにローダーに通知するメカニズムです。
質問にリストされている例はどちらも RequestFactory を使用していますが、RPC を使用する例もいくつかあり、JSON または XML からロードする例もいくつかあります。http://www.sencha.com/examples/#ExamplePlace:paginggridでは、主なデータ読み込み部分は次のとおりです。
// 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));