2014-11-25 42 views
1

我有幾分鐘的價值,我轉換成小時和分鐘(例如像615分鐘= 10小時和15分鐘)並顯示在網格中。默認情況下,ext js 5提供按字符串過濾。但我想按小時和分鐘過濾。可能嗎?如果是這樣,請告訴我。EXT JS 5 - 自定義過濾器小時和分鐘

+0

它是一個本地或遠程過濾?你能提供代碼或屏幕截圖嗎? – hgulyan 2014-11-25 12:48:34

+1

假設您正在討論gridfilters插件,那麼是的,您可以通過創建自己的自定義過濾器來輕鬆完成此操作。 – existdissolve 2014-11-25 13:03:42

回答

3

你可以很容易地擴展Ext.grid.filters.filter.String過濾器來做到這一點。其使用

示例代碼timefield:

Ext.define('Ext.ux.grid.filters.filter.Time', { 
    extend: 'Ext.grid.filters.filter.String', 
    alias: 'grid.filter.time', 

    type: 'time', 
    operator: 'eq', 

    // change item template to timefield 
    itemDefaults: { 
     xtype: 'timefield', 
     enableKeyEvents: true, 
     format: 'H:i', 
     hideEmptyLabel: false, 
     iconCls: Ext.baseCSSPrefix + 'grid-filters-find', 
     labelSeparator: '', 
     labelWidth: 29, 
     margin: 0, 
     selectOnFocus: true 
    }, 
    createMenu: function() { 
     var me = this; 
     me.callParent(); 

     // add handler to change event 
     me.inputItem.on({ 
      scope: me, 
      change: { 
       fn: me.onChange, 
       buffer: 200 
      } 
     }); 
    }, 
    // handle change event 
    onChange: function(field) { 
     this.setValue(field.getValue()); 
    }, 
    // set value - value comes as date 
    setValue: function (value) { 
     var me = this; 

     if (me.inputItem) { 
      me.inputItem.setValue(value); 
     } 

     // convert date to number 
     me.filter.setValue(value.getHours() * 60 + value.getMinutes()); 

     if (value && me.active) { 
      me.updateStoreFilter(me.filter); 
     } else { 
      me.setActive(!!value); 
     } 
    }, 
    activateMenu: function() { 
     var value = this.filter.getValue(); 

     // convert number back to date 
     this.inputItem.setValue(
      new Date(2008, 0, 1, Math.floor(value/60), (value % 60), 0) 
     ); 
    } 
}); 

小提琴:http://jsfiddle.net/dw82uxkh/9/

+0

感謝您的解決方案,但幾乎沒有變化是必需的。當我們過濾時間列時,它以01:32格式過濾字符串,但我們有1:32。所以,它不會過濾1:32。 – 2015-07-01 05:54:20