ExtJs加载嵌套JSON数据MVC
我知道这已经讨论过很多次了,但我就是不能让我的代码正常工作。。。 因此,我有一个PHP脚本,它返回以下JSON 我希望将数据加载到如下网格中: 名称|状态| ztn | dtn | idnExtJs加载嵌套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":[
{
"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(', ');
}
您可以在每个
连接上查询生成的嵌套存储
,如sostore.data.items[0].locks()
。这是否会返回正确的连接锁
存储连接
项的项?我对ExtJS,尤其是MVC非常陌生。那我要在哪里运行呢?我总是得到存储未定义
或无法调用未定义
的方法“locks”…您需要找到相应的父存储。下面是一个全内联的示例:Ext.getStore('Connections').data.items[0].locks()
通过控制台,我看到它返回了正确的ConnectionLocks
。但是我怎样才能将它们加载到我的网格中呢?例如,我必须使用哪个dataIndex
?存储之间存在一对多关系。因此,在当前网格中显示它们将很困难。网上有向网格添加扩展器以中继数据的示例。有时,我会添加第二个网格来显示子存储。