我的 EXT JS 4 模型数据在哪里?



使用Ext JS 4.1….

我有一个网格,它显示了一堆模型实例,尽管只显示了一些字段。然后,我有一个双击监听器,我想在那里将整个记录加载到一个表单中进行编辑。在双击监听器中,我没有看到hasMany关联中的数据,尽管json数据是根据Firebug的Net显示返回的,我在那里看到了服务器调用的响应。我的模型有什么问题吗?还是我做错了?

Request.js

Ext.define('Request', {
extend: 'Ext.data.Model',
requires: ['PointOfContact'],
fields: [
{name: 'id', type: 'int'},
{name: 'project', type: 'string'},
{name: 'purpose', type: 'string'},
{name: 'status'},
{name: 'additionalInfo', type: 'string'}
],
hasMany: [{
model: 'PointOfContact',
name: 'pointOfContacts',
foreignKey: 'id',
associationKey: 'pointOfContacts'
}],
proxy: {
type: 'rest',
url: '/web/project/rest/request/',
reader: { type: 'json' },
writer: { type: 'json' }
}
});

PointOfContact.js

Ext.define('PointOfContact', {
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'int'},
{name: 'fullName', type: 'string'},
{name: 'email', type: 'string'},
{name: 'phone', type: 'string'}
]
});

Requests.js

Ext.define('Requests', {
extend: 'Ext.data.Store',
model: 'Request',
autoLoad: true
});

请求View.js

Ext.define('RequestsView', {
extend: 'Ext.grid.Panel',
title: 'All Requests',
store: 'Requests',
viewConfig: {
singleSelect: 'true',
listeners: {
itemdblclick: function(dataview, record, item, index, e) {
console.log(record.get('project'));
console.log(record.get('purpose'));
console.log(record.get('status'));
console.log(record.get('additionalInfo'));
console.log(record.get('pointOfContacts'));
var comp = Ext.ComponentQuery.query('requestForm');
comp[0].getForm().loadRecord(record);
var mainPanel = Ext.ComponentQuery.query('mainpanel');
mainPanel[0].getLayout().setActiveItem('requestForm');
}
}
},
columns: [
{header: 'Project', dataIndex: 'project', flex: 1},
{header: 'Purpose', dataIndex: 'purpose', flex: 1},
{header: 'Status', dataIndex: 'status', flex: 1}
]
});

因此,在控制台中,我看到了project、purpose、status和additionalInfo的值,但pointOfContacts的值是"未定义的"。

有什么建议吗?

更新最终工作代码:这是我用来检索触点并在表单面板上加载带有触点的网格的工作代码

...
itemdblclick: function(dataview, record, item, e) {
var comp = Ext.ComponentQuery.query('requestForm');
comp[0].getForm().loadRecord(record);
Ext.getCmp('pocGrid').reconfigure(record.pointOfContacts());
var mainPanel = Ext.ComponentQuery.query('mainpanel');
mainPanel[0].getLayout().setActiveItem('requestForm');
}
....

有许多关联,默认情况下不会解析到关联的记录中。尤其是对于网格,因为它应该是一个平面数据视图。模型文档向您展示了如何设置关联,但没有说明如何为您创建实例:)有使用的链接有很多(http://docs.sencha.com/ext-js/4-1/#/api/Ext.data.association.HasMany)。不幸的是,它的用途并不是你所期望的。本质上,它的设计是通过调用存储来加载记录,从而按需获取记录。

最新更新