使用JsonRest和自定义json数组填充Dojo的数据网格

时间:2013-04-14 10:03:57

标签: json dojo dojox.grid.datagrid

我正在创建一个网格,用于绘制一个格式如下的JSON数据源:

[{"user":{"username":"foo","url":"bar"}},
   [{"product":{"name":"banana","price":"85"}},
    {"product":{"name":"peach","price":"66"}},
    {"product":{"name":"strawberry","price":"78"}}
   ]
]

但我无法弄清楚如何告诉datagrid使用产品的内容来填充datagrid。这是我的数据网格代码:

        <script>
        require(["dojo/store/JsonRest"], function (JsonRest) {
            myStore = new JsonRest({ target: 'myurl', handleAs: 'json'
            });
        });

        require(["dojox/grid/DataGrid", "dojo/data/ObjectStore", "dojo/domReady!"
        ], function (DataGrid, ObjectStore) {
            grid = new DataGrid({
                store: dataStore = new ObjectStore({ objectStore: myStore }),
                structure: [
                    { name: "Procuct", field: "name", width: "200px" }
                ]
            }, "grid3");

            grid.startup();

        });
    </script>
    <div id="grid3"></div>

我没有收到任何错误,但我看不到网格已填充。

这与THIS类似,但数据结构略有不同。

3 个答案:

答案 0 :(得分:0)

我认为它与你的json结构有关。 jsonArray的第一部分是一个对象,第二部分是一个数组:

[对象,ArrayOfProducts]

如果将数据隐藏在数组中的数组中,DataGrid应该如何找到必要的数据?然后在属性产品内。 尝试通过json传递简单的东西,如:

 [{"name":"banana","price":"85"},
  {"name":"peach","price":"66"},
  {"name":"strawberry","price":"78"}]

答案 1 :(得分:0)

您是否尝试过grid.render Array(dataStore)以使用内容填充网格?

答案 2 :(得分:0)

一个选项是在dataStore.query()调用之前将新属性附加到json对象。这可以通过dojo/aspect来完成。有关其他示例,请参阅article

aspect.before(dataStore, "query", function(items) {
    items.forEach(function(item) { 
        //Do something here. I'll combine two properties.
        item.newProperty = item.propertyValueA + "-" item.propertyValueB;
            return item;
        });
    return items;
});

当调用dataStore.query()时,上面调用上面的函数。这会导致将新属性添加到json对象。在上面的示例中,newProperty是propertyValueA和propertyValueB的串联。

这可以让你根据需要操作json。