2015-09-14 1 views
2

Я новичок в ExtJS, и я работаю над адресной книгой, в которой администраторы могут редактировать адрес пользователей, выбрав перечисленные состояния и города из двух списков со списком.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? Благодаря!

+0

Итак, вы хотите, чтобы вы выбрали состояние в строке 1, а теперь, если вы редактируете город в той же строке, должны появиться только те города, которые присутствуют в выбранном состоянии строки 1 –

+0

да, есть ли у вас какие-либо идеи? – walker

ответ

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 рабочий пример, где я использую два местных магазинах состояния & города. Фильтрация городского магазина, когда он редактируется со значением состояния, заданным в той же строке. Существуют три состояния A, B, C с 1-5,6-10 & 11-15 городов соответственно.

0

Вам просто нужно перезагрузить хранилище городов с параметром из состояния каждый раз, когда пользователь нажимает на редактор города. Сделайте это в событии перед вызовом в combobox.

{ 
    //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 
     } 
    } 
} 
Смежные вопросы