gwt - 使用 GWT RPC 调用将数据加载到 Sencha GXT (3.0) ListStore 的简单示例?

标签 gwt extjs rpc gxt

是否有人拥有或知道一个示例,演示如何使用 Sencha GXT 3.0 通过 GWT RPC 调用将数据加载到 ListStore 中?我知道有很多使用 2.x 版本中使用的 ModelData 和 BeanModel 接口(interface)的示例,但 3.0 不再需要使用这些接口(interface),并且据说允许使用实现 ValueProperty 接口(interface)的类加载 POJO 对象。

我已经在 3.0 Explorer 中看到了 RequestFactoryBinding 示例和 RequestFactory Grid 示例,但这些示例似乎演示了自定义数据代理和接收器的使用。通过查看这些示例中的代码,我认为可能需要这些技术/类,但这在任何地方都没有表现出来。可能会有更多文档即将发布,但到目前为止,除了 javadoc 和缺少示例方法中使用的一些源类的资源管理器之外,我还没有找到任何其他内容。

下面两个示例的链接。

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

RequestFactory 网格示例: http://www.sencha.com/examples/#ExamplePlace:requestfactorygrid

最佳答案

DataProxyLoader 主要用于促进 a) 依赖服务器进行过滤/分页/排序,或 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 逐个添加项目,但这会导致每个项目发生一个事件,应该避免。

编辑:此外,这在 2.x 中可能并不完全清楚,但数据本身不需要父类(super class)/接口(interface)。 ValueProvider 仅用作如何操作模型的外部抽象 - 通常如何从任何类型的模型读取或设置值。 PropertyAccess 接口(interface)允许仅通过使用 bean 访问器获取/设置值的属性名称来生成 ValueProvider (和其他)实例。加载数据不需要 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));

关于gwt - 使用 GWT RPC 调用将数据加载到 Sencha GXT (3.0) ListStore 的简单示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10575430/

相关文章:

java - GXT如何获取BeanModel的Map属性

css - 响应式 CSS,同时保持设置的宽度

css - ExtJS 4/5 - 为自定义规则不允许的拖放设置正确的 CSS

Extjs4,什么是lazyRender?

c++ - 使用 Apache Thrift 使用 HTTP 协议(protocol)实现服务器/客户端

networking - 在新的 Unity Networking 中,RPC 相当于什么?

java - 使用 GWT 作为 google 站点的 portlet?

javascript - 超时后重定向到其他 View

c - 对 `registerrpc' 的 undefined reference

javascript - GWT 和 JxBrowser - 有什么经验吗?