2016-12-15 65 views
1

我想爲我的網格列創建自定義過濾器。ExtJS 6.2:爲網格列創建自定義過濾器

我嘗試這樣做:

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.SingleFilterExt.grid.filters.filter.String

+0

它的工作!非常感謝你。所以我犯的唯一錯誤是我指定了錯誤的命名空間?我真的必須在ext-namespace中定義一個類才能使其工作嗎?有沒有辦法在我自己的結構/名稱空間創建一個過濾器,並手動添加到插件? – xdn

+0

我認爲你可以,但你必須覆蓋插件代碼來接受類/類名稱,而不只是鍵入字符串。實際上,應用程序名稱(Myapp)是您的視圖,控制器模型和商店的命名空間,而插件使用Ext全局對象。 –

+1

我們爲此找到了解決方案。您可以使用[Ext.grid.filters.filter.Base]中的createFilter-Function(https://docs.sencha.com/extjs/6.2.0/classic/Ext.grid.filters.filter.Base.html)它沒有在他們的文檔中列出,但你可以創建一個插件使用的過濾器。我會盡快更新我的問題。 – xdn