2017-02-02 33 views
2

У меня есть панель вкладок с несколькими вкладками. Один из них содержит сетку, а сетка содержит 3 itmes: 1 элемент с типом редактора «текстовое поле» и 2 элемента с редактором типа «combobox».ExtJS Combobox Ошибка: не удается прочитать свойство «store» undefined

Проблема: Я хочу отфильтровать хранилище combobox, основанное на предыдущем поле со списком. Но по какой-то причине он работает только в первый раз. После этого хранилище возвращается undefined.

Вот мой код:

items:[{ 
    xtype: 'grid', 
    id:'schema', 
    border: false,  
    data:[], 
    columns: 
    [{ 
     text  : 'Size', 
     dataIndex: 'size', 
     id: "SizeDropdown", 
     width : 200, 
     sortable : true, 
     editor : { 
      xtype: 'combobox', 
      id:'SelectSize', 
      editable:true, 

      valueField: 'typeValue', 
      displayField: 'typeValue', 
      mode:'local', 
      lastQuery: '', 
      listeners:{ 
      }, 
      store: new Ext.data.SimpleStore({ 
       fields: ['size', 'typeValue'], 
       data: [ 
         ['char', '12'], 
         ['char', '30'], 
         ['char', '31'], 
         ['int', '250'], 
         ['int', '500'], 
         ['int', '1000'], 
        ] 
      }), 
      allowBlank: false, 
      validator: function(input){         
       return true; 
      } 
     } 
    }], 
    listeners: { 
     beforeitemclick: function (eventThis, record, rowIndex, e) { 

      var SizeStore = Ext.getCmp('SizeDropdown').editor.store 

      SizeStore.clearFilter(); 
      SizeStore.filter('size', record.data.type); 
     } 
    } 

«record.data.type» возвращает «символ» или «INT», в зависимости от предыдущего выпадающего списка, фильтрация работает нормально , Но только в первый раз. После этого он ломает здесь:

var SizeStore = Ext.getCmp('SizeDropdown').editor.store 

И возвращается:

Cannot read property 'store' of undefined 

Я использую ExtJS "4.0.7"

+2

Вы можете переместить магазин за пределами вашего класса. Определите это нормально. Я не думаю, что хорошая идея иметь хранилище, определенное внутри редактора. Также вы могли бы воссоздать свою проблему на fiddle.sencha.com с помощью этой помощи было бы намного проще. – pagep

+0

@pagep спасибо, я объявил магазин вне класса, и он сработал. :) Напишите это как ответ, если хотите, и я его приму. – Nyagolova

ответ

0

Декларирование магазин за пределами класса Tab сделал работу.

Вот что я сделал:

 var sizeDropdownStore = new Ext.data.SimpleStore({ 
      fields: ['size', 'typeValue'], 
      data: [ 
        ['char', '12'], 
        ['char', '30'], 
        ['char', '31'], 
        ['int', '250'], 
        ['int', '500'], 
        ['int', '1000'], 
      ] 
     }); 


     ...{ 
      xtype: 'combobox', 
      id:'SelectSize', 
      editable:true, 
      valueField: 'typeValue', 
      displayField: 'typeValue', 
      mode:'local', 
      listeners:{ 
      }, 
      store: sizeDropdownStore, 
      allowBlank: false 
     }...