Php ExtJS 4网格:显示具有关联的嵌套数据模型
我是ExtJS新手,遇到了一个问题。我有一个深嵌套的json数据,我已经使用多个关联模型成功地将其加载到存储中。但是对于下一步,我无法在简单的网格中显示这些数据,请帮助。如何在位于json内部的网格中显示某些内容。。。。这是我的jsonPhp ExtJS 4网格:显示具有关联的嵌套数据模型,php,javascript,extjs,extjs4,Php,Javascript,Extjs,Extjs4,我是ExtJS新手,遇到了一个问题。我有一个深嵌套的json数据,我已经使用多个关联模型成功地将其加载到存储中。但是对于下一步,我无法在简单的网格中显示这些数据,请帮助。如何在位于json内部的网格中显示某些内容。。。。这是我的json { "success" : "true", "total":2, "user" : { "id" : 12, "email" : "abc@gmai
{
"success" : "true",
"total":2,
"user" :
{
"id" : 12,
"email" : "abc@gmail.com",
"course" :
{
"name" : "BESE",
"institute" :
[{
"name" : "Engineering University",
"semester" :
{
"number":1,
"TCH" : 12,
"GPA" : 2.32,
"Marks":23.32,
"record" : [
{
"subject" : "Global Studies",
"CH":2,
"GP":4,
"Grade": "A+",
"Marks":99.1
},
{
"subject" : "Digital Logic Design",
"CH":4,
"GP":3.5,
"Grade": "B+",
"Marks":79.1
}
]
}
},
{
"name" : "Another University",
"semester" :
{
"number":2,
"TCH" : 22,
"GPA" : 1.32,
"Marks":13.32,
"record" : [
{
"subject" : "C++",
"CH":2,
"GP":3,
"Grade": "C+",
"Marks":59.1
},
{
"subject" : "Engg Math",
"CH":4,
"GP":2.5,
"Grade": "C",
"Marks":39.1
}
]
}
}]
}
}
}
这是我的密码
Ext.define('User', {
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'int'},
{name: 'email', type: 'string'},
],
proxy: {
type: 'ajax',
url : 'getRecord.php',
reader: {
type: 'json',
root: 'user'
}
},
hasMany: { model: 'Course', name: 'course' ,associationKey: 'course'}
});
Ext.define('Course', {
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'int'},
{name: 'name', type: 'string'},
],
belongsTo: 'User',
hasMany: { model: 'Institute', name: 'institute' ,associationKey: 'institute'}
});
Ext.define('Institute', {
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'int'},
{name: 'name', type: 'string'},
],
belongsTo: 'Course',
hasMany: { model: 'Semester', name: 'semester',associationKey: 'semester' }
});
Ext.define('Semester', {
extend: 'Ext.data.Model',
fields: [
{name: 'number', type: 'int'},
{name: 'TCH', type: 'float'},
{name: 'GPA', type: 'float'},
{name: 'Marks', type: 'float'},
],
belongsTo: 'Institute',
hasMany: { model: 'Record', name: 'record',associationKey: 'record' }
});
Ext.define('Record', {
extend: 'Ext.data.Model',
fields: [
{name: 'subject', type: 'string'},
{name: 'CH', type: 'float'},
{name: 'GP', type: 'float'},
{name: 'Grade', type: 'string'},
{name: 'Marks', type: 'float'},
],
belongsTo: 'Semester',
});
Ext.require('Ext.data.*');
Ext.require('Ext.grid.*');
Ext.onReady(function(){
Ext.QuickTips.init();
var store = new Ext.data.Store({
model: "User",
});
store.load({
});
Ext.create('Ext.grid.Panel', {
renderTo: Ext.getBody(),
store: store,
width: 400,
height: 200,
title: 'Application Users',
columns: [
{
text: 'Name',
width: 100,
sortable: false,
hideable: false,
dataIndex: 'email'
},
{
text: 'Email Address',
width: 150,
dataIndex: 'course>aname',
},
{
text: 'Phone Number',
flex: 1,
dataIndex: 'User.course.name'
}
]
});
});
目前的一个限制是,默认情况下,嵌套数据不容易加载到网格中,但它正在积极工作。也许映射可以帮助您,我已通过以下方式解决了类似(但更简单)的问题: 我的json: 我的模型:
Ext.define('Operation', {
extend: 'Ext.data.Model',
idProperty: 'timestamp.__dt__',
fields: [{name:'__dt__', allowBlank:true, mapping:'timestamp.__dt__'},
{name:'description', allowBlank:false}]
});
我的专栏:
columns: [{header: 'Timestamp', width: 150, sortable: true, dataIndex: '__dt__'},
{header: 'Description' , width: 100, sortable: true, dataIndex: 'description', editor:'textfield'}],
希望它有帮助…如果您的json对象不满足extjs要求,只需更改对象格式即可。你可以做类似的事情:
Ext.ajax.request({url: 'getRecords.php', success: function(response) {
var data = Ext.decode(response.reseponseText);
//format your data
grid.loadData(formatedData);
}})
您还可以在服务器端格式化json对象“前Ext JS联合创始人和核心开发人员”我相信您的这一点:)为什么ExtJS不能做其他较小项目可以做的事情:只渲染整个json树?“积极工作”但仍然没有在anno 2016上工作。情不自禁。
Ext.ajax.request({url: 'getRecords.php', success: function(response) {
var data = Ext.decode(response.reseponseText);
//format your data
grid.loadData(formatedData);
}})