2013-12-03 4 views
8

У меня есть Ext.grid.Panel с набором столбцов. Эта сетка фильтруется, и в зависимости от фильтра я хотел бы определить редактор для столбца.Как настроить редактор для столбца программно в сетке

Моя сетка:

Ext.define('Mb.view.MyPanel', { 
    extend: 'Ext.grid.Panel', 
    columns: [ 
     {text: 'Order #', dataIndex: 'id'}, 
     {text: 'Action', dataIndex: 'type', 
      renderer: function(value){ 
       if(value == 'BP') return Lang._('Veuillez choisir') 
       return '' 
      } 
     }, 

Теперь я хотел бы сделать что-то вроде:

var panel = Mb.app.getView('MyPanel'); 
if (condition == true) { 
    panel.getColumns[1].setEditor({ 
     xtype: 'textfield', 
     ... 
    }) 
} 

Очевидно, что методы getColumns и setEditor не существует. Поэтому мне нужен другой способ активировать редактор в этом столбце.
Я не нашел способ доступа к определениям столбцов для их модификации и для повторной передачи сетки.

Можете ли вы дать мне подсказку, в каком направлении искать? Благодарю.

ответ

10

Отъезд документов для getEditor() по телефону Ext.grid.column.Column. Если вы используете плагин Editing, плагин обеспечивает реализацию для getEditor(), а также setEditor(). На основе редактируемого столбца и любой настраиваемой логики вы можете реализовать собственный метод getEditor() для возврата любого экземпляра редактора, который вы хотите, в зависимости от обстоятельств.

В документации сказано:

getEditor(record, defaultField) : Ext.form.field.Field 

Это действительно говорит небольшую часть правды.

  • getEditor не только метод Ext.grid.column.Column, но и вариант конфигурации.
  • Если getEditor определяется как функция конфигурации функции get, называется getEditor(record) и ему необходимо вернуть Ext.grid.CellEditor.
  • Это будет работать с плагином для сокетов, но не с плагином для плагинов.

Ниже приведен пример конфигурации столбца. Он создаст поле со списком только в выбранных строках:

columns: [{ 
    text: 'Action', dataIndex: 'action', 
    getEditor: function(record){ 
     if(my logic){ 
      return Ext.create('Ext.grid.CellEditor', { 
       field: Ext.create('Ext.form.field.ComboBox', { 
        forceSelection: true, 
        store: [[1, 'Option 1'], [2, 'Option 2']] 
       }) 
      }) 
     } else return false; 
    } 
}, 
+0

Я думаю, что получаю идею: я пишу 'getEditor (запись)' и возвращаю любое поле, подобное строке. Но где мне его определить? Как вариант конфигурации столбца? Это также означает, что могут быть разные редакторы на основе строк, правильно? –

+0

С другой стороны, когда я хотел бы использовать метод setEditor для столбца, мне нужна ссылка на столбец, и Idon't не знает, как получить это от объекта grid. –

+0

Да, вы просто определяете «getEditor()» для определения столбца. Посмотрите эту скрипку на пример: https://fiddle.sencha.com/#fiddle/2d – existdissolve

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