【问题标题】:How to use dojox/data/JsonRestStore with dojox/grid/LazyTreeGrid?如何将 dojox/data/JsonRestStore 与 dojox/grid/LazyTreeGrid 一起使用?
【发布时间】:2016-06-06 12:17:11
【问题描述】:

我现在有这个代码:

define([
    "dojo/_base/declare",
    "dojox/data/JsonRestStore",
    "dojox/grid/LazyTreeGrid",
    "dojox/grid/LazyTreeGridStoreModel"
], function(
    declare, 
    JsonRestStore,
    LazyTreeGrid,
    LazyTreeGridStoreModel
) {
    var layout = { ... },
        store = new JsonRestStore({
            target: "/api/items" // for example
            limitParam: "limit",
            offsetParam: "offset"
        }),

        model = new LazyTreeGridStoreModel({
            serverStore: true,
            store: store,
            childrenAttrs: [ "children" ]
        });

    return declare("CustomTreeGrid", [ LazyTreeGrid ], {
        treeModel: model,
        structure: layout
    });
});

我的小部件在启动后向目标 URL 发送数千个请求并冻结我的浏览器。如何修复错误行为并保存与 RESTful API 的兼容性?

使用 QueryReadStore 的解决方案有效,但不适用于我的情况 - Django REST 框架返回页面,并在 GET 请求上声明 API。

服务器以 JSON 格式返回数据:

{
    "items": [ ] //Array of items
    "identifier": "id",
    "numRows": 12 // Total count of items
}

我还更改了返回数组的服务器响应。响应标头还包含键“Content-Range: 0-2/3”(例如),它对我不起作用。

服务器响应标头:

HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Range: items 0-1/2
Content-Type: application/json
Vary: accept

服务器响应正文:

[
    {
        "id": 1,
        "children": false,
        "name": "name1"
    },
    {
        "id": 2,
        "children": false,
        "name": "name2"
    }
]

【问题讨论】:

  • 你认为你可以以某种方式暴露后端吗?在无法调试的情况下帮助您很难。另外,很高兴看到布局,所以我们可以制作一个有效的 sn-p
  • 后端是用 Django REST 框架编写的。用户拥有所有权限,在启动小部件后向 API URL 创建数千个请求。服务器返回每个响应的数组,并且网格是空的。
  • 这不是我的意思。实际上,您的问题没有足够的细节来帮助您。您需要共享后端响应的示例、前端正在调用的 url、您正在使用的布局......

标签: dojo


【解决方案1】:

很难用它制作一个 jsfiddle,因为您还需要服务器部分。

我找到了这个实现:https://github.com/jeremyg484/dojo-json-rest-store

它使用以下组合:dojo.store.Cachedojo.store.JsonRestdojo.store.Memorydojo.data.ObjectStore

也许你可以用它做点什么... 看看它是如何使用的:

myStore = dojo.store.Cache(dojo.store.JsonRest({target:"usstates/"}), dojo.store.Memory());
grid = new dojox.grid.DataGrid({store: dataStore = dojo.data.ObjectStore({objectStore: myStore})

【讨论】:

  • 我的问题是缺少 JsonRestStore 的 idAsRef 属性。它工作正常。
猜你喜欢
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 2011-04-30
  • 2013-04-09
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多