ExtJS如何在Grid面板中构建链接组合框

时间:2015-09-14 12:04:34

标签: javascript extjs combobox extjs4

我是ExtJS的新手,我正在制作一个地址簿,管理员可以通过从两个组合框中选择列出的州和城市来编辑用户的地址。

我需要在网格面板中构建一些链接组合框,以便在管理员在第一个下拉列表中选择一个状态后,亲属城市将自动列在第二个下拉列表中。

如果它只是一个简单的面板,我可以在使用以下代码选择状态后更新cityStore:

        {                               
            xtype:"combo",                                                                                   
            name:'state',  
            id:'state',  
            displayField:'name',  
            valueField:'id',  
            store:storeState,  
            triggerAction:'all',  
            queryMode:'local',  
            selecOnFocus:true,  
            forceSelection:true,  
            allowBlank:false,  
            editable:true,
            //using select listener for updating city store  
            listeners:{  
                select:function(combo,record,index){  
                    try{  
                        var city = Ext.getCmp('city');  
                        city.clearValue();  
                        city.store.load(  
                             {  
                                 params:{  
                                     paramId:combo.getValue()  
                                 }  
                             }     
                        );  
                    }catch(ex){  
                        alert("Failed to load data");  
                    }  

                }  
                }  

        },

但是在GridPanel中,如果我以相同的方式更新cityStore,整个列将会更改。 无论如何只能在Grid面板中的同一行中寻址?谢谢!

2 个答案:

答案 0 :(得分:2)

您需要使用validateedit& beforeedit网格事件更新城市商店。

listeners: {
        validateedit: {  // to check if state value is changed & clearing city value
                fn: function(event,editor){ 
                    switch (editor.field) {
            case 'state':
                 if(editor.value!=editor.record.getData().state)
                     editor.record.set('city',null);
                break;
             }
        return true;
        }
        },
        beforeedit: { // to update the city store based the state value of corresponding row
                fn: function(event,editor){                   

        switch (editor.field) {
            case 'city':
                  var cityStore = Ext.data.StoreManager.lookup('cityStore');
                 cityStore.load({  
                                  params:{  
                                         paramId:editor.value 
                                         }  
                                   });  
                 break;
                }
         return true;
         }
        }
       }

Here是一个工作示例,我正在使用两个本地商店state&市。在编辑时使用同一行中给出的状态值过滤城市商店。有三个状态A,B,C,1-5,6-10&分别为11-15个城市。

答案 1 :(得分:0)

每次用户点击城市编辑器时,您只需要使用州的param重新加载城市商店。在组合框中的beforequery事件中进行。

{
    //this is your Cities combo
    xtype: 'combo',
    valueField: 'foo',
    displayField: 'bar',
    queryMode: 'remote',
    queryCaching: false, //don't forget to disable query caching        
    bind: {
        store: '{cities}',   
    },
    listeners: {
        beforequery: function(queryPlan) {
            //get param from your States store
            queryPlan.combo.getStore();
            //then load this store
        }
    }
}