我需要一些使用Ext创建网格的帮助。这是我正在使用的代码:
作为数据源,我有一个如下所示的数组:
var listaEventos = [
{"nu_evento":"1","dt_solicitacao":"2013-01-04 14:29:26","no_evento":"nome do evento","empregado_responsavel":"nome do responsavel","contato":"contato unidade"},
{"nu_evento":"2","dt_solicitacao":"2013-01-04 14:54:29","no_evento":"nome do evento","empregado_responsavel":"nome do responsavel","contato":"contato unidade"},
{"nu_evento":"3","dt_solicitacao":"2013-01-04 14:55:35","no_evento":"nome do evento","empregado_responsavel":"nome do responsavel","contato":"contato unidade"},
{"nu_evento":"4","dt_solicitacao":"2013-01-04 15:04:47","no_evento":"nome do evento","empregado_responsavel":"nome do responsavel","contato":"contato unidade"},
{"nu_evento":"5","dt_solicitacao":"2013-01-04 15:07:24","no_evento":"nome do evento","empregado_responsavel":"nome do responsavel","contato":"contato unidade"},
{"nu_evento":"6","dt_solicitacao":"2013-01-04 15:08:07","no_evento":"nome do evento","empregado_responsavel":"nome do responsavel","contato":"contato unidade"},
{"nu_evento":"7","dt_solicitacao":"2013-01-04 15:17:27","no_evento":"nome do evento","empregado_responsavel":"nome do responsavel","contato":"contato unidade"}
];
使用PHP从DBMS查询此数组,PHP使用json将数组存储在HTML文档中,然后我的js代码获取数组并创建一个Ext网格来打印它,带有排序和填充。问题是我不能让Ext知道每个数组元素都是网格的行,每个对象字段代表网格的列。
为此我使用这个数据模型:
Ext.define('eventosDataModel', {
extend: 'Ext.data.Model',
fields: [
{name: 'nu_evento', type: 'string'},
{name: 'dt_solicitacao', type: 'date', dateFormat: "Y-m-d H:i:s"},
{name: 'no_evento', type: 'string'},
{name: 'empregado_responsavel', type: 'string'},
{name: 'contato', type: 'string'}
],
idProperty: 'eventos'
});
和这个商店:
var store = Ext.create('Ext.data.ArrayStore', {
model: 'eventosDataModel',
data: listaEventos
});
最后,我创建了网格:
var grid = Ext.create('Ext.grid.Panel', {
store: store,
stateful: true,
collapsible: false,
multiSelect: true,
stateId: 'stateGrid',
columns: columnsStructure,
height: 350,
width: 1200,
title: 'Eventos Existentes',
renderTo: 'eventos-extgrid',
viewConfig: {
stripeRows: true,
enableTextSelection: true
}
});
我在分隔变量中指定的列:
var columnsStructure = [
{
text : '#',
width : 50,
sortable : true,
dataIndex: 'nu_evento'
},
{
text : 'Nome do Evento',
width : 300,
sortable : true,
dataIndex: 'no_evento'
},
{
text : 'Data da Solicitação',
width : 200,
sortable : true,
renderer : Ext.util.Format.dateRenderer('d/m/Y H:i:s'),
dataIndex: 'dt_solicitacao'
},
{
text : 'Empregado Responsável',
width : 300,
sortable : true,
dataIndex: 'empregado_responsavel'
},
{
text : 'Contato',
width : 345,
sortable : false,
dataIndex: 'contato'
}
];
它可以正确创建网格,生成列,甚至可以创建与数组数量相同的行数。但是所有细胞都是空白的!
我成功地将每个对象转换为数组:
var listaEventos = [
["1","2013-01-04 14:29:26","nome do evento","user name","contato unidade"],
["2","2013-01-04 14:54:29","nome do evento","user name","contato unidade"],
["3","2013-01-04 14:55:35","nome do evento","user name","contato unidade"],
["4","2013-01-04 15:04:47","nome do evento","user name","contato unidade"],
["5","2013-01-04 15:07:24","nome do evento","user name","contato unidade"],
["6","2013-01-04 15:08:07","nome do evento","user name","contato unidade"],
["7","2013-01-04 15:17:27","nome do evento","user name","contato unidade"]
];
如果我不接触JS代码,如果我用这个数组提供它,所有数据都显示在网格上!
现在这对我来说很好,但它的可维护性非常糟糕。所有将PHP的DAO链接到Ext的网格的顺序是将元素添加到PHP上的数组并在JS上列出的顺序。当然,我可以对解释顺序重要性的每个文件做出重大评论,但如果PHP数组键与JS对象名称相关,则会更好,而Ext会理解它并按名称绑定而不是简单的顺序
有没有办法做出这种约束?
答案 0 :(得分:1)
您应该使用正确的idProperty
(您正在使用idProperty: 'eventos'
),我在您的数据数组中看不到eventos
。在你的情况下,我应该idProperty: 'nu_evento'
。