7

Sencha GXT 3.0を使用して、GWT RPC 呼び出しを介して ListStore にデータをロードする例を知っている人はいますか? バージョン 2.x で使用されていた ModelData および BeanModel インターフェイスの使用例が数多くあることは知っていますが、3.0 ではこれらのインターフェイスを使用する必要がなくなり、ValueProperty インターフェイスを実装するクラスを使用して POJO オブジェクトをロードできるようになっていると思われます。

RequestFactoryBinding の例と RequestFactory Grid の例を 3.0 エクスプローラーで見ましたが、これらはカスタム データ プロキシとレシーバーの使用を示しているようです。これらの例のコードを確認すると、これらの手法/クラスが必要になる可能性がありますが、それはどこにも明らかにされていません。今後さらに多くのドキュメントが作成される可能性がありますが、これまでのところ、サンプル メソッドで使用されているソース クラスの一部が欠けている javadocs と Explorer 以外のものを見つけることができませんでした。

以下の両方の例へのリンク。

RequestFactoryBinding の例: http://www.sencha.com/examples/#ExamplePlace:requestfactorybinding

RequestFactory グリッドの例: http://www.sencha.com/examples/#ExamplePlace:requestfactorygrid

4

2 に答える 2

8

DataProxyこれらは主にLoader、a) フィルタリング/ページング/ソートをサーバーに依存すること、または b) 同じデータにアクセスするためにアプリケーションのパーツ間で再利用することを容易にするために使用されます。クライアントがデータを 1 回しかロードしない場合、または手動でストア管理が行われる場合は (2.x のように) 必要ありません。

さまざまなストア読み込みクラス ( ListStoreBindingLoadResultListStoreBinding) は、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));
于 2012-05-14T03:19:12.780 に答える
0

FWIWリモートでページングおよびソートされたグリッドのGWTP Dispatch バージョンをスパイクしました。これは、コマンド パターンにひねりを加えた GWT RPC です。

グリッドに精通していると仮定すると、次のインスタンスが必要になります。

  • RpcProxy
  • PagingLoader
  • LoadResultListStoreBinding

そして、呼び出す必要があるメソッド:

  • PagingLoader.setRemoteSort(true)
  • PagingLoader.addLoadHandler()
  • Grid.setLoader()
  • PagingToolBar.bind()
于 2013-05-23T01:29:21.907 に答える