2016-12-20 2 views
2

Я следующий выпадающий заявил:ExtJS Filtering выпадающий магазин

{ 
    xtype: 'combobox', 
    id:'sizeSelect', 
    store: new Ext.data.SimpleStore({ 
     fields: [ 
        {name: 'typeChoosen', type: 'string'}, 
        {name: 'sizeValue', type: 'string'} 
     ], 
     data: [ 
      ['DECIMAL','(9.2)'], 
      ['DECIMAL','(9.4)'], 
      ['DECIMAL','(19.2)'], 
      ['DECIMAL','(19.4)'], 
      ['DECIMAL','(28.2)'], 
      ['DECIMAL','(28.4)'], 
      ['DECIMAL','(38.2)'], 
      ['DECIMAL','(38.4)'], 
      ['TEXT','250'], 
      ['TEXT','500'], 
      ['TEXT','1000'], 
      ['TEXT','2000'], 
      ['TEXT','4000'], 
      ['INTEGER','dafault'] 
     ] 
    }) 
} 

Я использую его в панели с сеткой, для колонки «Размер»:

enter image description here

Я хочу combobox в столбце «размер» для обновления на основе предыдущего значения ячейки с соответствующими значениями для каждого типа.

В сетчатой ​​панели у меня есть следующий слушатель, который я использую для фильтрации:

listeners : { 
beforeitemdblclick : function(eventThis, record, item, index, e, eOpts,objA){ 

    var stateCombo = Ext.getCmp('sizeSelect'); 
    var currentTypeChoosen = record.raw[1] 
    stateCombo.store.each(function(storeItem){ 
      if(storeItem.data.typeChoosen == currentTypeChoosen){ 
       stateCombo.store.filter("typeChoosen",currentTypeChoosen); 
      }           
    }); 
} 

кажется сравнить это правильно, но он возвращает объект в выпадающем списке, а не только значения. Я довольно новичок в ExtJS, и я действительно не могу придумать способ заставить его работать так, как я хочу.

UPDATE

Это мой рабочий код:

{ 
xtype: 'combobox', 
id:'sizeSelect', 
editable:false, 
valueField: 'typeValue', 
displayField: 'typeValue', 
mode:'local', 
lastQuery: '', 
allowBlank: false, 
listeners:{ 
}, 
store: new Ext.data.SimpleStore({ 
    fields: ['size', 'typeValue'], 
    data: [ 
      ['DECIMAL', '(9,2)'], 
      ['DECIMAL', '(9,4)'], 
      ['DECIMAL', '(19,2)'], 
      ['DECIMAL', '(19,4)'], 
      ['DECIMAL', '(28,2)'], 
      ['DECIMAL', '(28,4)'], 
      ['DECIMAL', '(38,2)'], 
      ['DECIMAL', '(38,4)'], 
      ['TEXT', '250'], 
      ['TEXT', '500'], 
      ['TEXT', '1000'], 
      ['TEXT', '2000'], 
      ['TEXT', '4000'] 
     ] 
}) 
} 

var panel3 = Ext.create('Ext.panel.Panel', { 
    id:'step3', 
    border:0, 
    xtype: 'panel', 
    anchor:'100% 100%', 
    hideMode:'display', 
    bodyStyle:"overflow-y:scroll !important;", 
    hidden:true, 
    autoHeight:true, 
    items: [{ 
     xtype: 'grid', 
     id:'tableTypeGrid', 
     border: false,      
     plugins: [ 
      Ext.create('Ext.grid.plugin.CellEditing', { 
       clicksToEdit: 2 
      }) 
     ], 
     listeners : { 
      beforeitemdblclick : function(eventThis, record, item, index, e, eOpts){ 
       var stateSizeCombo = Ext.getCmp('sizeSelect'); 
       var sizeColumnStore = stateSizeCombo.getStore(); 
       var prevCellValue = record.data.type; 
       sizeColumnStore.clearFilter(); 
       sizeColumnStore.filter('size', prevCellValue); // 
       } 
      }, 
      ... 

Свойство выпадающего списка оказалось очень важными :)

ответ

1

Я думаю, что вы можете использовать beforeedit событие для сетки (добавлено с Ext.grid.plugin.Editing), например:

beforeedit: function(plugin, context) { 
     // Current editor panel size combo 
     var sizeCombo = plugin.editor.down('combo[name=size]'); 
     if(sizeCombo) { 
      var sizeStore = sizeCombo.getStore(); 
      sizeStore.clearFilter(); 
      sizeStore.filter('type', context.record.get('type')); 
     } 
    } 

Проверьте это simple example.

+0

Спасибо! Пример действительно полезен. Я попробую это позже, и я надеюсь, что он также будет работать с моим кодом, потому что последняя версия ext, которую я могу использовать, - это 4.0. :/Это сомнительно. – Nyagolova

+1

@Няголова, конечно, проверьте! На самом деле я работал с ExtJS 4, и я читал документы ExtJS 4, чтобы ответить на ваш вопрос, поэтому считаю, что он должен работать с ExtJS 4+. Если нет - спросите меня здесь. –

+0

Я собираюсь принять его, потому что вы ответили мне очень много (хотя он не был реализован в моем коде), и скрипка на самом деле работает! :) – Nyagolova

Смежные вопросы