如何在dojox / grid / LazyTreeGrid中使用dojox / data / JsonRestStore?

时间:2016-06-06 12:17:11

标签: dojo

我现在有了这段代码:

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 Framework在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"
    }
]

1 个答案:

答案 0 :(得分:2)

很难从中创建一个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})