2012-05-13 6 views
7

Sencha GXT 3.0を使用して、GWT RPCコールを介してListStoreにデータをロードする方法を示す例はありますか?私は、2.xバージョンで使用されているModelDataとBeanModelインターフェイスを使用する例が多数あることを知っていますが、これらのインターフェイスを使用する必要はありません。GWT RPC呼び出しを使用してSencha GXT(3.0)ListStoreにデータをロードするための簡単な例は?

私はRequestFactoryBindingの例とRequestFactory Gridの例を3.0エクスプローラで見てきましたが、これらはカスタムデータプロキシと受信者の使用方法を示すようです。これらの例のコードを見直すことで、これらのテクニック/クラスは必要とされるかもしれないがどこでも明らかにならないと仮定している。より多くのドキュメンテーションがある可能性がありますが、これまでのところ、javadocsやExplorerのサンプルメソッドで使用されていたソースクラスのいくつかが欠けていることはほとんどありませんでした。

以下の両方の例にリンクしています。

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

RequestFactoryグリッド例:

http://www.sencha.com/examples/#ExamplePlace:requestfactorygrid

答えて

8

DataProxyLoaderソート/フィルタリング/ページングのためにサーバに依存する)容易にするために主に使用される、またはb)との間に再利用されています同じデータにアクセスするためのアプリケーションの一部。クライアントがデータを一度だけロードする場合、または手動ストア管理が行われる場合は、(2.xのように)それらは必須ではありません。

さまざまなストアロードクラス(ListStoreBindingLoadResultListStoreBinding)は、ListStoreに項目を供給する方法を内部的に示しています。この最初の方法は、あなたのRPCコールバックやRequestFactory受信機にonSuccess方法からストア内の既存のアイテムを置き換えることができます:

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

一度だけロードする、または唯一の追加、交換しない場合は、他の方法を使用する必要があります:

store.addAll(newItems); 

アイテムstore.addを使用して1つずつ追加することができますが、これは、アイテムごとのイベントになりますし、避けるべきです。

編集:また、これは2.xから完全にはっきりしないかもしれませんが、データ自体にスーパークラス/インターフェースは必要ありません。 ValueProviderは、モデルがどのように操作されるか、どのような種類のモデルから値が一般的にどのように読み取られるか、またはどのように設定されるかについての外部抽象としてのみ使用されます。 PropertyAccessインターフェイスを使用すると、ValueProvider(およびその他の)インスタンスは、値がBeanアクセサを使用して取得/設定されるプロパティ名だけで生成されます。 ValueProviderタイプ/インスタンスは、データウィジェット自身が表示しているデータを抽出し、ユーザーが値を編集した後に変更を加えるだけで、データのロードには必要ありません。


これらの部分を知っていると、ローダー/プロキシー機構は同じ基本的な方法でデータをロードします。 Loaderは、ロード時にどの設定(ページング、フィルタリング、ソート)を使用した後、負荷をトリガーするかを指示します。異なるサブクラスは異なる責任を持ち、異なるロード設定タイプを受け入れ、異なる結果を返します。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)); 
+0

おかげでおそらく私にはよく言葉私の質問をしませんでした。私は店舗の使用とその店舗からのアイテムの追加/削除に精通していますが、私は3.xのオブジェクトとインターフェイスを使用しているロードプロセスの明確な例を見つけることができませんでした。私は、RPCを介してデータリクエストを開始し、レスポンスを受信して​​ストアに応答をロードするために、3.xの機能を完全に使用するサンプルを見つけることができませんでした(RPCコール - >レスポンス - >ローダ - >ストア - ウィジェット)。 –

+0

申し訳ありませんが、あなたが挙げた例では、ローダーの使用をかなり明確にしていると思いました。 –

0

FWIW Iリモートページング及びソートグリッドのGWTP Dispatch versionスパイク。コマンドパターンがひねっているGWT RPCはどれですか?

  • RpcProxy
  • PagingLoader
  • LoadResultListStoreBinding

そして、呼び出される必要がある方法:あなたがグリッドに精通していると仮定すると、

、あなたはのインスタンスを必要とします:

  • PagingLoader.setRemoteSort(true)
  • PagingLoader.addLoadHandler()
  • Grid.setLoader()
  • PagingToolBar.bind()
関連する問題