使用带有dojo ObjectStore适配器的deep:true查询选项

时间:2012-03-30 17:34:58

标签: datagrid dojo datastore

我是Dojo的新手,在我的合作伙伴和我开始一个新项目之前,我试图让我的头脑包围一些非常基本的概念。我已成功使用ItemFileWriteStore将ajax请求返回的数据传入DataGrid,但我想使用新的Memory存储。我正在使用ObjectStore适配器来包装Memory存储,并且数据正在网格中填充。

有一件事令我担心。在我正在运行的示例代码中,我正在使用JSON对象中的一些嵌套节点来填充网格。它是他们在dojo文档中使用的States JSON对象之一。这是该对象的一小部分:

'items': [
{ 'name':'Africa', 'type':'continent', children:[
    { 'name':'Egypt', 'type':'country' },
    { 'name':'Kenya', 'type':'country', children:[
        { 'name':'Nairobi', 'type':'city' },
        { 'name':'Mombasa', 'type':'city' } ]
    },
    { 'name':'Sudan', 'type':'country', 'children':
        { 'name':'Khartoum', 'type':'city' }
    } ]
   },
 ]

在DataGrid实例化中,我发送一个查询,然后我将qureyOptions设置为{deep:true},如下所示:

var grid = new DataGrid({
    style: "width: 500px; height: 300px;",
    store: this._geoStore,
    structure: layoutGeo,
    rowSelector: '20px',
    columnReordering: true,
    query: {},
    queryOptions: { deep: true },
    rowsPerPage: 20
}, document.createElement("div"));

当我使用旧的ItemFileWriteStore时,这样可以正常工作,并且所有嵌套数据基本上都被展平并放置在网格中,正如我所期望的那样。但是,当我将其切换到包含在ObjectStore适配器中的Memory存储时,网格中显示的唯一数据是数据对象的最顶层父数据。对于样本数据,仅显示与非洲相关但未与其子项相关的数据。所以看起来queryOptions {deep:true}语句在使用Memory存储时没有任何影响。

是否有某种方法可以使用包含在ObjectStore中的Memory存储将JSON对象中的嵌套数据导入数据网格?我原本认为包装类会处理这个问题,它可能会,但我不知道如何解决它。

对于所有帮助的人,非常感谢您花时间和愿意分享您的专业知识。我真的已经研究了dojo docs和web很长一段时间试图弄清楚这些东西了。我担心我可能会掩饰一些显而易见的东西,我希望你们都能帮忙。

1 个答案:

答案 0 :(得分:0)

我在http://swingingcode.blogspot.com/2012/03/dojo-implementing-viewmodelstore.html

上发布了有关商店更改的博文

此处的代码使用新的商店对象,但带来了数据api的引用符号。所有对象都将被视为顶级对象并且可以查询。我没有实现逻辑来提取嵌套对象。