当一个对象的属性中包含了另一个对象,即外键,如:
public class Post implements java.io.Serializable {
private String id;
private String name;
private String num;
private Post parent;
private Department department;
private Role role;
private Integer sort;
private Integer delstate;
private Integer children; // 0表示无子节点,1表示有子节点
Post 对象 ,含有department和role的外键对象,此时,grid中的dataIndex store中的field以及reader中的field怎么写呢
一:grid中的dataIndex
var postGrid = new Ext.grid.GridPanel({
sm : sm,
loadMask : {
msg : '正在加载表格数据,请稍等...'
},
store : postStore,
frame : true,
columns : [sm,{
header : 'id',
id : 'id',
dataIndex : 'id',
hidden : true,
sortable : false
},{
header : '岗位名称',
dataIndex : 'name',
width : 300,
resizable : true
},{
header : '岗位编号',
dataIndex : 'num',
width : 150
},{
header : '所在部门',
dataIndex : 'department.name',
width : 100
},{
header : '所属职级',
dataIndex : 'role.name',
width : 150
}],
这里只用写出对象中的属性即可,如果是含有对象外键,省去对象点,然后后面按照一般属性定义即可。
二:store中的field
var postStore = new Ext.data.JsonStore({
proxy : new Ext.data.HttpProxy({
url : 'post_queryAllPost.action'
}),
root : 'item_Post',
fields : ['id', 'name','num','department.name'
,'role.name']
});
postStore.load();
这里跟grid中对象属性定义方法一样
三:reader中的field
当某一form需要加载reader
var editChildrenForm = new Ext.form.FormPanel({
reader : _jsonFormReader,
然后items定义如下
items: [{
xtype:'hidden',
name:'post.id',
id:'editNodeId'
},{
fieldLabel: '岗位名称',
xtype : 'textfield',
id:'editNodeName',
name: 'post.name',
anchor : '100%',
allowBlank:false
},{
fieldLabel: '岗位编号',
xtype : 'textfield',
id:'editNodeNum',
name: 'post.num',
anchor : '100%',
allowBlank:false
},{
fieldLabel : '部门类型',
id:'editNodeRole',
xtype : 'combo',
store : roleStore,
valueField : 'id',
anchor : '100%',
displayField : 'name',
mode : 'local',
forceSelection : true,// 必须选择一项
hiddenName : 'post.role.id',// hiddenName才是提交到后台的input的name
editable : false,// 不允许输入
triggerAction : 'all'
}],
而这些item中的值又要通过ognl传到后台作参数时,name中的属性必须加上对象点,也就是完整对象写法,然后下面最重要的是下面reader的mapping
var _jsonFormReader = new Ext.data.JsonReader({
root : 'item_Post'
}, [{
name : 'post.id',
mapping : 'id'
}, {
name : 'post.name',
mapping : 'name'
}, {
name : 'post.num',
mapping : 'num'
},{
name : 'post.role.id',
mapping : 'role.id'
},{
name : 'post.role.name',
mapping : 'role.name'
}]);
映射 的这个地方非常 特别,如果是给某一个 下拉框赋值,而这个下拉框本身又有值得时候 ,比如
id :'updateDepartmentid',
fieldLabel : '部门',
xtype : 'combo',
store : departmentStore,
valueField : 'id',
anchor : '98%',
displayField : 'name',
mode : 'local',
forceSelection : true,// 必须选择一项
hiddenName : 'user.department.id',// hiddenName才是提交到后台的input的name
editable : false,// 不允许输入
triggerAction : 'all',//
allowBlank : false// 该选项值不能为空
name : 'b',
mapping : 'department.id'
},{
name : 'a',
mapping : 'department.name'
如果下拉框的id 与 映射中 b的值 相等,那么 下拉框赋值 为 id 所对应 在下拉框里记录中 相同 id 的 name 的值
如果下拉框的 id 与 映射中a 的值相等 ,那么下拉框赋值为 department.name的值