StringFilter.js
上传用户:dawnssy
上传日期:2022-08-06
资源大小:9345k
文件大小:4k
源码类别:

JavaScript

开发平台:

JavaScript

  1. /*!  * Ext JS Library 3.1.0  * Copyright(c) 2006-2009 Ext JS, LLC  * licensing@extjs.com  * http://www.extjs.com/license  */ /** 
  2.  * @class Ext.ux.grid.filter.StringFilter
  3.  * @extends Ext.ux.grid.filter.Filter
  4.  * Filter by a configurable Ext.form.TextField
  5.  * <p><b><u>Example Usage:</u></b></p>
  6.  * <pre><code>    
  7. var filters = new Ext.ux.grid.GridFilters({
  8.     ...
  9.     filters: [{
  10.         // required configs
  11.         type: 'string',
  12.         dataIndex: 'name',
  13.         
  14.         // optional configs
  15.         value: 'foo',
  16.         active: true, // default is false
  17.         iconCls: 'ux-gridfilter-text-icon' // default
  18.         // any Ext.form.TextField configs accepted
  19.     }]
  20. });
  21.  * </code></pre>
  22.  */
  23. Ext.ux.grid.filter.StringFilter = Ext.extend(Ext.ux.grid.filter.Filter, {
  24.     /**
  25.      * @cfg {String} iconCls
  26.      * The iconCls to be applied to the menu item.
  27.      * Defaults to <tt>'ux-gridfilter-text-icon'</tt>.
  28.      */
  29.     iconCls : 'ux-gridfilter-text-icon',
  30.     emptyText: 'Enter Filter Text...',
  31.     selectOnFocus: true,
  32.     width: 125,
  33.     
  34.     /**  
  35.      * @private
  36.      * Template method that is to initialize the filter and install required menu items.
  37.      */
  38.     init : function (config) {
  39.         Ext.applyIf(config, {
  40.             enableKeyEvents: true,
  41.             iconCls: this.iconCls,
  42.             listeners: {
  43.                 scope: this,
  44.                 keyup: this.onInputKeyUp
  45.             }
  46.         });
  47.         this.inputItem = new Ext.form.TextField(config); 
  48.         this.menu.add(this.inputItem);
  49.         this.updateTask = new Ext.util.DelayedTask(this.fireUpdate, this);
  50.     },
  51.     
  52.     /**
  53.      * @private
  54.      * Template method that is to get and return the value of the filter.
  55.      * @return {String} The value of this filter
  56.      */
  57.     getValue : function () {
  58.         return this.inputItem.getValue();
  59.     },
  60.     
  61.     /**
  62.      * @private
  63.      * Template method that is to set the value of the filter.
  64.      * @param {Object} value The value to set the filter
  65.      */
  66.     setValue : function (value) {
  67.         this.inputItem.setValue(value);
  68.         this.fireEvent('update', this);
  69.     },
  70.     /**
  71.      * @private
  72.      * Template method that is to return <tt>true</tt> if the filter
  73.      * has enough configuration information to be activated.
  74.      * @return {Boolean}
  75.      */
  76.     isActivatable : function () {
  77.         return this.inputItem.getValue().length > 0;
  78.     },
  79.     /**
  80.      * @private
  81.      * Template method that is to get and return serialized filter data for
  82.      * transmission to the server.
  83.      * @return {Object/Array} An object or collection of objects containing
  84.      * key value pairs representing the current configuration of the filter.
  85.      */
  86.     getSerialArgs : function () {
  87.         return {type: 'string', value: this.getValue()};
  88.     },
  89.     /**
  90.      * Template method that is to validate the provided Ext.data.Record
  91.      * against the filters configuration.
  92.      * @param {Ext.data.Record} record The record to validate
  93.      * @return {Boolean} true if the record is valid within the bounds
  94.      * of the filter, false otherwise.
  95.      */
  96.     validateRecord : function (record) {
  97.         var val = record.get(this.dataIndex);
  98.         if(typeof val != 'string') {
  99.             return (this.getValue().length === 0);
  100.         }
  101.         return val.toLowerCase().indexOf(this.getValue().toLowerCase()) > -1;
  102.     },
  103.     
  104.     /**  
  105.      * @private
  106.      * Handler method called when there is a keyup event on this.inputItem
  107.      */
  108.     onInputKeyUp : function (field, e) {
  109.         var k = e.getKey();
  110.         if (k == e.RETURN && field.isValid()) {
  111.             e.stopEvent();
  112.             this.menu.hide(true);
  113.             return;
  114.         }
  115.         // restart the timer
  116.         this.updateTask.delay(this.updateBuffer);
  117.     }
  118. });