今天这个这个Combo的二级联动,确实把我给纠结了半天。搜了好多资料。才解决。归根结低还是自己没写好。
之前因为我是把两个Combo直接写到GridPanel里的tbar上面。在第一个combo的select事件监听里老是获取不到第二个combo。也许是因为自己方法不对吧。
我把我实现了的代码贴上吧。。希
gaStroe.js
var GameList = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({
url: Gam.aspx' //url随意哈
}),
reader: new Ext.data.JsonReader({
root: 'data',
id: 'KindID'
}, [
{name: 'KindID', mapping: 'KindID'},
{name: 'KindName', mapping: 'KindName'}
])
});
var ServerList = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({
url: Gam.aspx?kid='
}),
reader: new Ext.data.JsonReader({
root: 'data',
id: 'ServerID'
}, [
{name: 'ServerID', mapping: 'ServerID'},
{name: 'ServerName', mapping: 'ServerName'}
])
});
GridPanel所在js
//第二个Combo2 之前是跟Combo1放在一起的,所以没实现。
var Combo2 = new Ext.form.ComboBox({
xtype: 'combo',
width: 110,
name: 'Combo2',
editable: false,
hiddenName: 'ID',
mode: 'local',
displayField: "Name",
valueField: "ID",
triggerAction: "all",
store: ServerList
});
var JinRuHomesList = new Ext.grid.GridPanel({
…………
tbar: [
{
xtype: 'combo1', //第一个Combo 主要的。
width: 110,
name: 'elItem',
editable: false,
hiddenName: 'ID',
mode: 'remote',
forceSelection: true, //必须选择一项
displayField: "KName",
valueField: "KID",
loadingText: 'loading...',
triggerAction: 'all',
emptyText: '请选择',
store: GameList,
listeners: {
'select': function(combo, record, index) {
Servers_selItem.clearValue();
ServerList.proxy = new Ext.data.HttpProxy({ url: 'Gam.aspx?kid=' + combo.value });
ServerList.load({
callback: function(store, record, opts) {
//这里是第二个combo加载数据的回调函数,设置默认选项
//设置-1是因为我在后台拼接json数组的时候,值就给的-1
//网上的资料说的store.setValue(1) 这种不加引号的是按选项索引来。
//可我始终没设置成功。郁闷!
Servers_selItem.setValue("-1");
}
});
}
}
}, '-',
Combo2 }] //我反正是这样写,在第一个listeners哪里才获取得到它。哎。
……