【问题标题】:Querying JsonRest without HTTP requests for data在没有 HTTP 数据请求的情况下查询 JsonRest
【发布时间】:2014-11-07 00:45:01
【问题描述】:

我使用 OnDemandGrid 和 JsonRest 存储从 RESTful API 检索数据并将其显示在表上。该表相当复杂,并且使用了所有 JsonRest CRUD 方法。 这是我正在使用的基本结构:

JsonRest:

...
var restStore = Observable(Cache(JsonRest({
    target:"source", 
    idProperty: "id"
}), Memory()));
...

OnDemandGrid:

...
var grid = new (declare([OnDemandGrid, Selection, Keyboard]))({
    sort: "name",
    store: restStore,
    columns: [
           {field: "name", label: "Name"},
           {field: "state", label: "State"},
           {field: "city", label: "city"}
         ],
    loadingMessage: "Loading data...",
    noDataMessage: "No data"
}, "grid");
grid.startup();
...

我想在客户端过滤数据而不发送 HTTP 请求。你能给我一些解决这个问题的想法吗?

自己的研究:

Dgrid 教程基于一个事实,即一切都依赖于 dojo-store。

当 dgrid 与 store 交互时,所有分页、过滤和排序职责都落在 store 上,而不是 grid。 ...当遇到数据呈现问题时,请始终检查存储实现(和后端服务,如果适用)是否按预期执行。

所以这意味着我必须在商店方面解决这个问题。我想,我必须扩展 JsonRest 商店的 QueryResults 但我一直在碰壁。

我也想过查询缓存 - 但我失去了 JsonRest...

【问题讨论】:

    标签: dgrid dojo jsonreststore


    【解决方案1】:

    如果您基本上对最初从您的服务中一次性检索数据负载感兴趣,然后在客户端执行所有排序/过滤/分页,请查看dojo-smore/RequestMemory - 您将其传递给@ 987654322@,一旦它从 URL 获取数据,它基本上就像一个内存存储,除了它的方法返回承诺而不是立即值。

    【讨论】:

    • 感谢您的回答,肯。实际上,显示的数据是可编辑的,并且使用了所有 JsonRest CRUD 方法。我假设,RequestMemory 在获取数据后不会与服务器交互,因为它继承了 Memory?
    • 啊。是的,在那种情况下,该部门将缺少 RequestMemory。您可能需要扩展和自定义一个存储来完成 RequestMemory 对 get/query 所做的事情,而 JsonRest 对 add/put/remove 所做的事情。
    猜你喜欢
    • 2011-12-16
    • 2017-11-02
    • 2020-01-30
    • 1970-01-01
    • 2022-07-02
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多