开发中遇到了这样的问题
有2个combox组件,当组件一选择完数据后,组件2根据组件1的value从后台查找数据并返回给组件2
遇到的问题:刚开始做的时候思路,给组件1添加select事件,当select的时候将组件2的store.reload({params:{canshu:canshu}})
但这样做完全是错误的,可能是对EXTJS了解不深,这种方法只能让组件2刷新一次,也就是第一次触发组件1的select的时候,以后再触发组件1的select事件都不会刷新组件2,所以最终放弃了上面的做法。
解决办法:当组件1select的时候,直接用ajax访问后台,返回数据,然后通过组件2的store.loadData()来直接加载json数据,OK一切解决了,不过注意在后台返回的数据是文字格式,必须要转化成JSON对象才能成功的 loadData();
实例:
//Combo1
var _Proxy = new Ext.data.HttpProxy({url:path});
var _Reader = new Ext.data.JsonReader({},
[
{name:'CengJi',type:'string',mapping:'cengJi'},
{name:'displayCengJi',type:'string',mapping:'displayCengJi'}
]);
var _Store = new Ext.data.Store({
proxy:_Proxy,
reader:_Reader
});
var ComBo1 = new Ext.form.ComboBox({
height:100,
width:200,
name:name,
fieldLabel:fieldlabel,
editable:false,
triggerAction:'all',//指定查询格式'ALL','QUERY'
mode:'romote',
store:_Store,
displayField:'displayCengJi',
valueField:'CengJi'
});
//主要的工作都是通过select事件完成的
ComBo1 .on('select',function(combo,record,index){
var DeptJiBie = combo.getValue();
var Store = combo2.getStore();
SupperDept.clearValue();
Ext.Ajax.request({
url:'../../GetSupperDept.do',
params:{DeptJiBie:DeptJiBie},
method:'post',
success:function(response) {
var Data = response.responseText;
//注意response.responseText是文本格式,必须要调用Ext.util.JSON.decode()方法转换成 json对象
Store.loadData(Ext.util.JSON.decode(Data));
//Ext.Msg.alert('消息提示',Data);
},
failure:function(response) {
Ext.Msg.alert('消息提示','我擦,访问不了!');
}
});
});
//combo2
var _Proxy = new Ext.data.MemoryProxy([]);
var _Reader = new Ext.data.JsonReader({},
[
{name:'deptname',type:'string',mapping:'deptname'},
{name:'tid',type:'string',mapping:'tid'}
]);
var _Store = new Ext.data.Store({
proxy:_Proxy,
reader:_Reader
});
var ComBo2 = new Ext.form.ComboBox({
height:100,
width:200,
name:name,
fieldLabel:fieldlabel,
editable:false,
triggerAction:'all',//指定查询格式'ALL','QUERY'
mode:'local',
store:_Store,
displayField:'deptname',
valueField:'tid'
});
有2个combox组件,当组件一选择完数据后,组件2根据组件1的value从后台查找数据并返回给组件2
遇到的问题:刚开始做的时候思路,给组件1添加select事件,当select的时候将组件2的store.reload({params:{canshu:canshu}})
但这样做完全是错误的,可能是对EXTJS了解不深,这种方法只能让组件2刷新一次,也就是第一次触发组件1的select的时候,以后再触发组件1的select事件都不会刷新组件2,所以最终放弃了上面的做法。
解决办法:当组件1select的时候,直接用ajax访问后台,返回数据,然后通过组件2的store.loadData()来直接加载json数据,OK一切解决了,不过注意在后台返回的数据是文字格式,必须要转化成JSON对象才能成功的 loadData();
实例:
//Combo1
var _Proxy = new Ext.data.HttpProxy({url:path});
var _Reader = new Ext.data.JsonReader({},
[
{name:'CengJi',type:'string',mapping:'cengJi'},
{name:'displayCengJi',type:'string',mapping:'displayCengJi'}
]);
var _Store = new Ext.data.Store({
proxy:_Proxy,
reader:_Reader
});
var ComBo1 = new Ext.form.ComboBox({
height:100,
width:200,
name:name,
fieldLabel:fieldlabel,
editable:false,
triggerAction:'all',//指定查询格式'ALL','QUERY'
mode:'romote',
store:_Store,
displayField:'displayCengJi',
valueField:'CengJi'
});
//主要的工作都是通过select事件完成的
ComBo1 .on('select',function(combo,record,index){
var DeptJiBie = combo.getValue();
var Store = combo2.getStore();
SupperDept.clearValue();
Ext.Ajax.request({
url:'../../GetSupperDept.do',
params:{DeptJiBie:DeptJiBie},
method:'post',
success:function(response) {
var Data = response.responseText;
//注意response.responseText是文本格式,必须要调用Ext.util.JSON.decode()方法转换成 json对象
Store.loadData(Ext.util.JSON.decode(Data));
//Ext.Msg.alert('消息提示',Data);
},
failure:function(response) {
Ext.Msg.alert('消息提示','我擦,访问不了!');
}
});
});
//combo2
var _Proxy = new Ext.data.MemoryProxy([]);
var _Reader = new Ext.data.JsonReader({},
[
{name:'deptname',type:'string',mapping:'deptname'},
{name:'tid',type:'string',mapping:'tid'}
]);
var _Store = new Ext.data.Store({
proxy:_Proxy,
reader:_Reader
});
var ComBo2 = new Ext.form.ComboBox({
height:100,
width:200,
name:name,
fieldLabel:fieldlabel,
editable:false,
triggerAction:'all',//指定查询格式'ALL','QUERY'
mode:'local',
store:_Store,
displayField:'deptname',
valueField:'tid'
});