ExtJs加载嵌套JSON数据MVC

ExtJs加载嵌套JSON数据MVC,json,extjs,extjs-mvc,Json,Extjs,Extjs Mvc,我知道这已经讨论过很多次了,但我就是不能让我的代码正常工作。。。 因此,我有一个PHP脚本,它返回以下JSON 我希望将数据加载到如下网格中: 名称|状态| ztn | dtn | idn { "success":true, "code":0, "message":"works", "data":[ { "name":"connection1", "status":1, "locks":[

我知道这已经讨论过很多次了,但我就是不能让我的代码正常工作。。。 因此,我有一个PHP脚本,它返回以下JSON

我希望将数据加载到如下网格中:

名称|状态| ztn | dtn | idn

{
   "success":true,
   "code":0,
   "message":"works",
   "data":[
      {
         "name":"connection1",
         "status":1,
         "locks":[
            {
               "ztn":"abc",
               "dtn":"def",
               "idn":"123"
            },
            {
               "ztn":"ghi",
               "dtn":"jkl",
               "idn":"456"
            }
         ]
      },
      {
         "name":"connection2",
         "status":1,
         "locks":[
            {
               "ztn":"mno",
               "dtn":"pqr",
               "idn":"789"
            }
         ]
      }
我的商店是这样建立的:

Ext.define('VPN.store.Connections', {
    extend: 'Ext.data.Store',
    id: 'connectionStore',
    requires: [
        'VPN.model.Connection',
        'VPN.model.ConnectionLocks'
    ],
    model: "VPN.model.Connection",
    autoLoad: true,
    proxy: {
        type: 'ajax',
        url: 'api/router.php',
        reader: {
            type: 'json',
            root: 'data'
        }
    }
});
Ext.define("VPN.model.Connection", {
    extend: 'Ext.data.Model',
    id: 'connectionModel',
    fields: ['name', 'status'],
    hasMany: {
        model: 'VPN.model.ConnectionLocks',
        name: 'locks'
    }
});
Ext.define("VPN.model.ConnectionLocks", {
    extend: 'Ext.data.Model',
    id: 'connectionLocksModel',
    fields: ['ztn', 'dtn', 'idn'],
    belongsTo: 'VPN.model.Connections'
});
我的第一个模型如下所示:

Ext.define('VPN.store.Connections', {
    extend: 'Ext.data.Store',
    id: 'connectionStore',
    requires: [
        'VPN.model.Connection',
        'VPN.model.ConnectionLocks'
    ],
    model: "VPN.model.Connection",
    autoLoad: true,
    proxy: {
        type: 'ajax',
        url: 'api/router.php',
        reader: {
            type: 'json',
            root: 'data'
        }
    }
});
Ext.define("VPN.model.Connection", {
    extend: 'Ext.data.Model',
    id: 'connectionModel',
    fields: ['name', 'status'],
    hasMany: {
        model: 'VPN.model.ConnectionLocks',
        name: 'locks'
    }
});
Ext.define("VPN.model.ConnectionLocks", {
    extend: 'Ext.data.Model',
    id: 'connectionLocksModel',
    fields: ['ztn', 'dtn', 'idn'],
    belongsTo: 'VPN.model.Connections'
});
我的第二个模型是这样的:

Ext.define('VPN.store.Connections', {
    extend: 'Ext.data.Store',
    id: 'connectionStore',
    requires: [
        'VPN.model.Connection',
        'VPN.model.ConnectionLocks'
    ],
    model: "VPN.model.Connection",
    autoLoad: true,
    proxy: {
        type: 'ajax',
        url: 'api/router.php',
        reader: {
            type: 'json',
            root: 'data'
        }
    }
});
Ext.define("VPN.model.Connection", {
    extend: 'Ext.data.Model',
    id: 'connectionModel',
    fields: ['name', 'status'],
    hasMany: {
        model: 'VPN.model.ConnectionLocks',
        name: 'locks'
    }
});
Ext.define("VPN.model.ConnectionLocks", {
    extend: 'Ext.data.Model',
    id: 'connectionLocksModel',
    fields: ['ztn', 'dtn', 'idn'],
    belongsTo: 'VPN.model.Connections'
});
网格的存储是
VPN.model.Connections
<代码>名称和状态正确显示,但锁的
ztn
dtn
idn
未显示。。。
我的错在哪里

我终于找到了解决办法。这是我找到并更改的片段的一部分。 我用以下代码替换了我的
存储
-定义中的
数据索引

renderer: function(value, metaData, record, rowIdx, colIdx, store, view) {
                values = [];
                record.locks().each(function(lock) {
                    values.push(lock.get('idn'));
                });
                return values.join(', ');
            }

您可以在每个
连接上查询生成的嵌套
存储
,如so
store.data.items[0].locks()
。这是否会返回正确的
连接锁
存储
连接
项的项?我对ExtJS,尤其是MVC非常陌生。那我要在哪里运行呢?我总是得到
存储未定义
无法调用未定义
的方法“locks”…您需要找到相应的父存储。下面是一个全内联的示例:
Ext.getStore('Connections').data.items[0].locks()
通过控制台,我看到它返回了正确的
ConnectionLocks
。但是我怎样才能将它们加载到我的网格中呢?例如,我必须使用哪个
dataIndex
?存储之间存在一对多关系。因此,在当前网格中显示它们将很困难。网上有向网格添加扩展器以中继数据的示例。有时,我会添加第二个网格来显示子存储。