2013-07-22 7 views
0

im Получение Uncaught TypeError: Невозможно вызвать метод getColumns undefined при нажатии на панель заголовка панели Live Serach Grid Panel на ExtJS. Im реализует фильтры с помощью функции фильтров.«Невозможно вызвать метод getColumns« неопределенного »в FiltersFeature of LiveSearchGridPanel ExtJS

Heres некоторые из моего кода:

Ext.require([ 
'Ext.grid.*', 
'Ext.ux.grid.FiltersFeature', 
'Ext.ux.LiveSearchGridPanel' 
... 
]); 

var filters = { 
    ftype: 'filters', 
    encode: false, 
    local: true 
}; 

var grid = new Ext.create('Ext.ux.LiveSearchGridPanel', { 
    selType: 'cellmodel', 
    store: store, 
    columns:[ 
    { 
     header: "Evento", 
     width: 90, 
     sortable: true, 
     filterable: true, 
     dataIndex: 'RH_DESCRIPCION', 
     filter: { 
      type: 'string' 
     } 
    }], 
    features: [filters] 
... 

Это блок кода, где происходит исключение:

Ext.Array.each(grid.columnManager.getColumns(), function (column) { 
//Uncaught TypeError: Cannot call method 'getColumns' of undefined 
     if (column.filterable === false) { 
      filters.removeAtKey(column.dataIndex); 
     } else { 
      add(column.dataIndex, column.filter, column.filterable); 
     } 
    }); 

Любая помощь будет appriciated!

ответ

4

После более тяжелой отладки кажется, что grid.columnManager не очень хорошо поддерживается в версии 4.2. Для любых других с той же проблемой, вы должны использовать:

grid.down('headercontainer').getGridColumns(); 

или

grid.down('headercontainer').getVisibleGridColumns(); 

ухватить столбцов на сетке. Я считаю, что это не будет работать с группированными столбцами, но я его не тестировал.

+1

Чтобы получить все столбцы, включая группировку и скрытое использование - grid.down ('headercontainer'). GetHideableColumns(); – Zon

0
Ext.Array.each(grid.columnManager.getColumns(), function (column) ... 

изменение

Ext.Array.each(grid.columns, function (column) { 

работает хорошо :)

+0

В ExtJS 4.2.1 columnManager.getColumns() игнорирует скрытые столбцы.Также ColumnManager - это частный класс. Я настоятельно рекомендую не использовать этот метод. Вместо этого используйте myGrid.query ('gridcolumn'). –

0

grid.columns не поддерживается/государственной собственностью. Он может не содержать, например, столбцы, добавленные с перенастройкой. Он будет содержать их, если вы используете 4.2.0, но не в 4.2.1/4.2.2. Это произойдет, даже если вы добавите Ext.selection.CheckboxModel, столбец флажка не будет включен в 4.2.2, и вы получите «несоответствие индекса», если вы получите индекс, скажем, событие cellClick.

К сожалению, grid.columnManager или grid.getColumnManager() является новым в 4.2.1/4.2.2 и является частной собственностью/методом. Короче говоря, любой из них может перестать работать со следующими выпусками ExtJS, а свойство «columns» не является надежным во всех случаях.

Смотрите некоторые обсуждения здесь: http://www.sencha.com/forum/showthread.php?277525

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

0

Как уже писали другие, вы не должны использовать свойство columnManager. Проверьте примечание Сенча о нем:

http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.grid.ColumnManager

This is a private utility class for internal use by the framework. Don't rely on its existence.

Я думаю, что лучший вариант, чтобы использовать это для всех столбцов:

grid.headerCt.getGridColumns() 

И это, если вам нужно только видимые столбцы:

grid.headerCt.getVisibleGridColumns() 
Смежные вопросы