【问题标题】:ExtJS 4.2.0 loading nested JSON data in gridExtJS 4.2.0 在网格中加载嵌套的 JSON 数据
【发布时间】:2016-04-01 15:14:18
【问题描述】:

我有一个返回以下 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

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

【问题讨论】:

    标签: javascript json extjs grid


    【解决方案1】:

    这是一个fiddle 演示工作代码

    获取对应hasMany store的方法是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());
            })
    

    【讨论】:

    • 您好 Weeksdev,感谢您的回答。您能否查看以下 json 结构并帮助我加载相同的数据? {“成功”:真,“代码”:0,“消息”:“作品”,“数据”:[{“名称”:“连接1”,“状态”:1,“信息1”:[“一”, “二”、“三”、“四”]、“info2”:[“十”、“二”、“八”、“四”] }] }
    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多