ExtJS 4.2.0在网格中加载嵌套的JSON数据

时间:2014-03-07 11:10:08

标签: javascript json extjs grid

我有一个返回以下JSON

的脚本
{
   "success":true,
   "code":0,
   "message":"works",
   "data":[
      {
         "name":"connection1",
         "status":1,
         "info":[
            {
               "info1":"abc",
               "info2":"def",
               "info3":"123"
            },
            {
               "info1":"ghi",
               "info2":"jkl",
               "info3":"456"
            }
         ]
      },
      {
         "name":"connection2",
         "status":1,
         "info":[
            {
               "info1":"mno",
               "info2":"pqr",
               "info3":"789"
            }
         ]
      },
      {
         "name":"connection3",
         "status":1,
         "info":[
            {
               "info1":"stu",
               "info2":"vwx",
               "info3":"123"
            }
         ]
      },
      {
         "name":"connection4",
         "status":0,
         "info":[

         ]
      },
      {
         "name":"connection5",
         "status":0,
         "info":[

         ]
      }
   ]
}

现在我希望将namestatusinfo's加载到网格中。 所以我首先定义了我的数据模型:

Ext.define("Data", {
            extend: 'Ext.data.Model',
            fields: ['name', 'status']
        });

然后是我的信息模型:

Ext.define("Info", {
            extend: 'Ext.data.Model',
            fields: [
                'info1',
                'info2',
                'info3'
            ],
            belongsTo: 'Data'
        });

并设置我的商店:

var store = Ext.create('Ext.data.Store', {
            model: "Data",
            autoLoad: true,
            proxy: {
                type: 'ajax',
                url: 'valid/URL.php'
            },
            reader: {
                type: 'json',
                root: 'data'
            }

        });

但我的console.debug(store)会记录data: items: Array[0]。 我试着添加

hasMany: { model: 'Info', name: 'info' }

到我的数据模型,然后我的console.debug(store)日志model: undefined

有谁知道我的错误在哪里?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

这是展示工作代码的fiddle

执行获取相应hasMany存储的方法是info()store.data.items[0].info()

此外,在您的示例中,阅读器放置不当。它应该在代理定义中。复制/粘贴代码时,我不确定这只是一个错误。这是相应的型号和商店:

信息模型:

Ext.define("Info", {
            extend: 'Ext.data.Model',
            fields: ['info1', 'info2', 'info3'],
            belongsTo:'Data'
        });

数据模型:

Ext.define("Data", {
            extend: 'Ext.data.Model',
            fields: ['name', 'status'],
            hasMany:{model:'Info',name:'info'}
        });

商品

var store = Ext.create('Ext.data.Store', {
            model: "Data",
            autoLoad: true,
            proxy: {
                type: 'ajax',
                url: 'data1.json',
                reader: {
                    type: 'json',
                    root: 'data'
                }
            }
        });

加载后的演示日志:

store.on('load', function() {
            console.log(store.data.items[0].info());
        })