ExtJs加载嵌套的JSON数据MVC

时间:2014-03-10 13:37:45

标签: json extjs extjs-mvc

我知道这已经讨论了很多次,但我无法让我的代码工作...... 所以我有一个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'
});

网格的商店是VPN.model.Connectionsnamestatus已正确显示,但锁定的ztndtnidn未显示... 那么我的错误在哪里?

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方法。它是我发现和改变的片段的一部分。 我使用以下代码替换了dataIndex - 定义中的store

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