DataProxy
とLoader
ソート/フィルタリング/ページングのためにサーバに依存する)容易にするために主に使用される、またはb)との間に再利用されています同じデータにアクセスするためのアプリケーションの一部。クライアントがデータを一度だけロードする場合、または手動ストア管理が行われる場合は、(2.xのように)それらは必須ではありません。
さまざまなストアロードクラス(ListStoreBinding
、LoadResultListStoreBinding
)は、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));
おかげでおそらく私にはよく言葉私の質問をしませんでした。私は店舗の使用とその店舗からのアイテムの追加/削除に精通していますが、私は3.xのオブジェクトとインターフェイスを使用しているロードプロセスの明確な例を見つけることができませんでした。私は、RPCを介してデータリクエストを開始し、レスポンスを受信してストアに応答をロードするために、3.xの機能を完全に使用するサンプルを見つけることができませんでした(RPCコール - >レスポンス - >ローダ - >ストア - ウィジェット)。 –
申し訳ありませんが、あなたが挙げた例では、ローダーの使用をかなり明確にしていると思いました。 –