Dynamic 如何根据ExtJS4中选择的其他数据更改combo中的数据
我正在使用ExtJS4.0.7。我有一个要求,在网格的编辑模式中有两个组合框,我需要根据第一个框中选择的值更改第二个框中的数据 我正在使用用于extjs的MVC架构和返回json字符串的java代码来填充组合框中的数据。我的第一个组合框的代码是: 查看文件:Dynamic 如何根据ExtJS4中选择的其他数据更改combo中的数据,dynamic,extjs,load,store,reload,Dynamic,Extjs,Load,Store,Reload,我正在使用ExtJS4.0.7。我有一个要求,在网格的编辑模式中有两个组合框,我需要根据第一个框中选择的值更改第二个框中的数据 我正在使用用于extjs的MVC架构和返回json字符串的java代码来填充组合框中的数据。我的第一个组合框的代码是: 查看文件: items: [{ id: 'country', header: 'Countries', field: { xtype: 'combo
items: [{
id: 'country',
header: 'Countries',
field: {
xtype: 'combo',
store: [
["USA","USA"],
["India","India"],
],
editable: false,
allowBlank: false,
listeners: {
select: function(combo, records, eOpts){
contactTypeGrid = combo.getValue();
myGrid.fireEvent('LoadStateOnSelect');
}
}
}
},
{
id: 'states',
header: 'Sates',
dataIndex: 'states',
field: {
xtype: 'combo',
store: 'StateStore',
valueField: 'stateDesc',
displayField: 'stateText',
}
}, ....
]
控制器:
LoadStateOnSelect: function(){
contactTypeGrid = contactTypeGrid.toLowerCase();
var stateStore = this.getStateStoreStore();
stateStore.getProxy().url = "myURL.do";
stateStore.getProxy().extraParams.act = contactTypeGrid;
stateStore.load();
},
但是,当我运行此代码时,第二个存储区中的数据在后台更改,但加载掩码继续出现在前面,因此我无法选择任何值
如何解决传统数据加载问题?任何帮助都将不胜感激。在重新加载存储之前,您是否尝试清除组合框中的选定值?您可以尝试调用组合上的clearValue方法。我有一个临时修复程序。然而,我仍然在寻找一个更稳定、更可行的解决方案 解决方案: 无论何时更改从属存储中的数据,都可以展开组合框,以正确加载新数据
LoadStateOnSelect: function(){
contactTypeGrid = contactTypeGrid.toLowerCase();
var stateStore = this.getStateStoreStore();
stateStore.getProxy().url = "myURL.do";
stateStore.getProxy().extraParams.act = contactTypeGrid;
statesCombo.expand(); //Here I am assuming that "statesCombo" has a
//reference to the dependant combo box.
stateStore.load();
},
这可能会节省其他人的时间,但是,如果有人找到一个更可行的解决方案,请让我也知道 carStore-主组合的任意存储
carModelStore-商店,其内容应取决于carStore中的选择
考虑从服务器获取数据时更一般和有用的示例
var carModelStore = new Ext.data.Store({
reader: new Ext.data.JsonReader({
fields: ['id', 'car-model'],
root: 'rows'
}),
storeId: 'car-model-store',
proxy: new Ext.data.HttpProxy({
url: 'carmodeldataprovider.json?car-name=lamborghini'
}),
autoLoad: true
});
{ xtype: 'combo', name: 'car-name', fieldLabel: 'Car', mode: 'local', store: carStore, triggerAction: 'all',
listeners: {
select: function(combo, records, eOpts){
var carName = records.get('car-name');
var carModelStore = Ext.StoreMgr.lookup("car-model-store");
carModelStore.proxy.setUrl('carmodeldataprovider.json?car-name=' + carName, false);
carModelStore.reload();
}
}
}
谢谢你的回答,阿伦。然而,store.clearValue不是一个方法,我尝试了store.removeAll,但它没有帮助。在调试时使用firebug,我注意到当我在country组合中进行第一次选择并按下states的触发器时,会触发一个请求,并且会完美地加载值。但是,当我第二次重复该过程时,不会触发新的请求,但是状态中的数据会发生变化,并且会出现一个加载掩码。这是什么意思?我的错。store.clearValue不是方法,但是存在componentReference.clearValue。我尝试过,但即使这样也没有帮助。我尝试过复制此文件,但在使用新数据重新加载存储时没有出现任何问题。我缩小了应用程序以创建一个新文件夹来复制此文件,但是,我仍然存在此问题。我确信我在某处犯了一个错误。你能分享一段代码片段来突出我的错误吗。我使用一个本地数据存储复制了这个场景,消除了对java数据的需求。您是否有指向此文件夹所在位置的链接?我可以看一下。嘿,美塞苔丝。扩展是一个快速修复。。。你找到永久的解决办法了吗?