我正在尝试为表单面板中的组件设置值,下面是我的代码。
带网格的表单面板:
Ext.define('MyApp.view.MyForm', {
extend: 'Ext.form.Panel',
height: 436,
width: 754,
layout: {
columns: 4,
type: 'table'
},
bodyPadding: 10,
title: 'My Form',
initComponent: function() {
var me = this;
Ext.applyIf(me, {
items: [
{
xtype: 'displayfield',
colspan: 4,
fieldLabel: '',
value: 'Display Field'
},
{
xtype: 'displayfield',
colspan: 2,
margin: '0 50 0 0 ',
fieldLabel: 'Age',
labelAlign: 'top',
value: 'Display Field'
},
{
xtype: 'displayfield',
colspan: 2,
fieldLabel: 'Country',
labelAlign: 'top',
value: 'Display Field'
},
{
xtype: 'gridpanel',
colspan: 4,
header: false,
title: 'My Grid Panel',
store: 'MyJsonStore',
columns: [
{
xtype: 'gridcolumn',
dataIndex: 'DeptName',
text: 'Dept Name'
},
{
xtype: 'gridcolumn',
dataIndex: 'DeptId',
text: 'Dept ID'
}
]
}
]
});
me.callParent(arguments);
}
});
型号:
Ext.define('MyApp.model.EmpModel', {
extend: 'Ext.data.Model',
uses: [
'MyApp.model.DeptModel'
],
fields: [
{
name: 'Name'
},
{
name: 'Age'
},
{
name: 'Country'
},
{
name: 'Dept'
}
],
hasMany: {
associationKey: 'Dept',
model: 'MyApp.model.DeptModel'
}
});
Ext.define('MyApp.model.DeptModel', {
extend: 'Ext.data.Model',
uses: [
'MyApp.model.EmpModel'
],
fields: [
{
name: 'DeptName'
},
{
name: 'DeptId'
}
],
belongsTo: {
associationKey: 'Dept',
model: 'MyApp.model.EmpModel'
}
});
商店:
Ext.define('MyApp.store.MyJsonStore', {
extend: 'Ext.data.Store',
requires: [
'MyApp.model.EmpModel'
],
constructor: function(cfg) {
var me = this;
cfg = cfg || {};
me.callParent([Ext.apply({
model: 'MyApp.model.EmpModel',
storeId: 'MyJsonStore',
data: {
EmpDet: [
{
EmpName: 'Kart',
Age: '29',
Dept: [
{
DeptName: 'Dev',
DeptId: '1000'
}
]
}
]
},
proxy: {
type: 'ajax',
url: 'data/empDet.json',
reader: {
type: 'json'
}
}
}, cfg)]);
}
});
Json数据:
{
"EmpDet": [
{
"EmpName": "Kart",
"Age": "29",
"Dept": [
{
"DeptName": "Dev",
"DeptId": "1000"
}
]
}
]
}
问题:
1)我将组件的值保留为“显示字段”本身,因为如果我删除此值,则下面网格的宽度会减小。我觉得这是因为桌面布局和colspans。是否有任何其他最佳方式来显示标签,而不会在值负载上进行任何对齐更改。
2)我正在尝试设置显示字段的值。我尝试使用afterrender
事件来做,但问题是它在Ext.getStore('MyJsonStore').getAt(0)
处抛出一个未定义的错误。我发现如果我在按钮的单击事件中写入相同内容,这可以正常工作。因此,当我尝试显示字段的afterrender
事件时,我觉得商店没有加载(商店的自动加载设置为true)。是否有替代组件的afterrender事件。另外,有没有办法一次性设置所有字段值,而不是逐个设置每个组件?
3)此外,我发现很难正确地进行关联。我正在使用Sencha Architect 2.2,当我去网格的数据索引时,我无法在下拉列表中获得“DeptName”和“DeptId”。
请帮忙。
答案 0 :(得分:0)
对于问题2,我想建议以下方式。我希望它适合你。
我的解决方案:
您可以在加载商店时设置显示字段值。所以你可以使用store的load事件如下:
yourStoe.on('load',function()
{
//set display field values here
});