Dynamic 如何根据ExtJS4中选择的其他数据更改combo中的数据

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

我正在使用ExtJS4.0.7。我有一个要求,在网格的编辑模式中有两个组合框,我需要根据第一个框中选择的值更改第二个框中的数据

我正在使用用于extjs的MVC架构和返回json字符串的java代码来填充组合框中的数据。我的第一个组合框的代码是:

查看文件:

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数据的需求。您是否有指向此文件夹所在位置的链接?我可以看一下。嘿,美塞苔丝。扩展是一个快速修复。。。你找到永久的解决办法了吗?