2016-12-15 3 views
1

Я хотел бы создать собственный фильтр для моей gridcolumn.ExtJS 6.2: создание настраиваемого фильтра для gridcolumn

Я попытался это:

Ext.define('Myapp.grid.filters.filter.Float', { 
    extend : 'Ext.grid.filters.filter.Number', 
    alias : ['grid.filter.float'], 

    type : 'float', 

    config : { 
    serializer : function (f) { 
     return { 
     type  : 'float', 
     value : f.value, 
     property : f.property, 
     operator : f.operator 
     }; 
    } 
    } 
}); 

Затем я попытался использовать фильтр в моем GridColumn:

{ 
     header  : 'Foo', 
     dataIndex : 'bar', 
     filterable : true, 
     filter  : { 
     type : 'float' 
     } 
    } 

Как создавать, добавлять или регистрировать фильтры к gridfilter -plugin в моем приложении ? Я действительно не понимаю.

Заранее спасибо

Решение:

Мы использовали createFilter-функцию в Ext.grid.filters.filter.Base создавать и использовать фильтр:

Ext.define('MyApp.foo.bar.FloatFilter', { 
    extend : 'Ext.grid.filters.filter.Number', 
    alias : 'grid.filter.float', 

    createFilter : function (config, key) { 
    config.type = 'float'; 
    return this.callParent(arguments); 
    } 

}); 

ответ

3

Чтобы добавить новый тип фильтра вы должны определить новый класс , расширенный от Ext.grid.filters.filter.Base или его потомка (точно так же, как вы это сделали).

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

Кроме того, вы можете проверить существующий код фильтров, чтобы узнать, как добавить пользовательские правила меню или фильтра, например Ext.grid.filters.filter.String на основе Ext.grid.filters.filter.SingleFilter.

+0

Это работает! Большое спасибо. Значит, единственная ошибка, которую я сделал, я указал неправильное пространство имен? Должен ли я действительно определять класс в ext-namespace, чтобы он работал? Невозможно создать фильтр в моей собственной структуре/пространстве имен и добавить его вручную в плагин? – xdn

+0

Я думаю, что вы можете, но вам нужно переопределить код плагина, чтобы принять имя класса/класса, а не просто ввести строку. На самом деле, имя приложения (Myapp) - это пространство имен для ваших представлений, моделей контроллеров и хранилищ, а плагин использует Ext global object. –

+1

Мы нашли решение для этого. Вы можете использовать функцию createFilter в [Ext.grid.filters.filter.Base] (https://docs.sencha.com/extjs/6.2.0/classic/Ext.grid.filters.filter.Base.html) которые не указаны в их документации, но вы можете создать фильтр, который используется плагином. Я скоро обновлю свой вопрос. – xdn