Dojo增强型Datagrid没有填充JsonRest存储

时间:2013-10-23 00:01:19

标签: javascript json datagrid dojo

我的Datagrid没有填充商店

我的休息电话会返回: { “onlineUsers”:[], “offlineUsers”:[ “123.456.7.890:8080”]}

My code:
require([  "dojo/store/JsonRest",
        "dojo/store/Memory",
        "dojo/store/Cache",
        "dojox/grid/EnhancedGrid",
        "dojox/grid/enhanced/plugins/Pagination",
        "dojo/data/ObjectStore",
        "dojo/dom-attr",
        "dojo/domReady!"],
        function(JsonRest, Memory, Cache, EnhancedGrid, Pagination, ObjectStore, domAttr){

        var store = new dojo.store.JsonRest({target:"/Url/rest/onlineusers/all"});

        var dataStore = new dojo.data.ObjectStore({objectStore: store});

        var grid = new EnhancedGrid({
            id: 'grid',
            store: dataStore,
            structure: [
          {name: "Offline Users", field: "offlineUsers", width: "100px"}
        ]
        }, "gridDiv");

            grid.startup();
    });

我在日志中看到了这个: [object Object]

我也看到了这个: [18:12:57.822]不推荐使用getAttributeNode()。请改用getAttribute()。 @ http://ajax.googleapis.com/ajax/libs/dojo/1.8.4/dojo/dojo.js:146

我做错了什么?

1 个答案:

答案 0 :(得分:1)

那是因为你的数据结构错了。我想你想创建一个网格,每个主机/地址在网格中列为一行?

商店的数据结构应该是一个对象数组。您使用字符串数组定义了一个对象,该字符串不符合所需的结构。有关REST服务应实现的格式的更多信息,请参阅RFC 2616 document

您有三种选择:

  1. 更改您的RESTful Web服务,以Dojo可以处理的方式返回您的数据
  2. 编写自己的商店实施
  3. 通过手动定义AJAX请求并映射对象来手动解析数据客户端
  4. 第三种解决方案看起来像:

    var data =  {"onlineUsers":[],"offlineUsers":["123.456.7.890:8080"]}; // Retrieve with an AJAX request
    var offlineUsers = array.map(data.offlineUsers, function(user) {
        return {
            host: user  
        };
    });
    var store = new Memory({ data: offlineUsers });
    var dataStore = new ObjectStore({objectStore: store});
    

    然后,您可以将网格的structure属性更改为:

    [
        {name: "Offline Users", field: "host", width: "100px"}
    ]
    

    我还做了一个上面例子的JSFiddle,你可以看到here