RangeMenu.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  */ Ext.ns('Ext.ux.menu');
  2. /** 
  3.  * @class Ext.ux.menu.RangeMenu
  4.  * @extends Ext.menu.Menu
  5.  * Custom implementation of Ext.menu.Menu that has preconfigured
  6.  * items for gt, lt, eq.
  7.  * <p><b><u>Example Usage:</u></b></p>
  8.  * <pre><code>    
  9.  * </code></pre> 
  10.  */
  11. Ext.ux.menu.RangeMenu = Ext.extend(Ext.menu.Menu, {
  12.     constructor : function (config) {
  13.         Ext.ux.menu.RangeMenu.superclass.constructor.call(this, config);
  14.         this.addEvents(
  15.             /**
  16.              * @event update
  17.              * Fires when a filter configuration has changed
  18.              * @param {Ext.ux.grid.filter.Filter} this The filter object.
  19.              */
  20.             'update'
  21.         );
  22.       
  23.         this.updateTask = new Ext.util.DelayedTask(this.fireUpdate, this);
  24.     
  25.         var i, len, item, cfg, Cls;
  26.         for (i = 0, len = this.menuItems.length; i < len; i++) {
  27.             item = this.menuItems[i];
  28.             if (item !== '-') {
  29.                 // defaults
  30.                 cfg = {
  31.                     itemId: 'range-' + item,
  32.                     enableKeyEvents: true,
  33.                     iconCls: this.iconCls[item] || 'no-icon',
  34.                     listeners: {
  35.                         scope: this,
  36.                         keyup: this.onInputKeyUp
  37.                     }
  38.                 };
  39.                 Ext.apply(
  40.                     cfg,
  41.                     // custom configs
  42.                     Ext.applyIf(this.fields[item] || {}, this.fieldCfg[item]),
  43.                     // configurable defaults
  44.                     this.menuItemCfgs
  45.                 );
  46.                 Cls = cfg.fieldCls || this.fieldCls;
  47.                 item = this.fields[item] = new Cls(cfg);
  48.             }
  49.             this.add(item);
  50.         }
  51.     },
  52.     /**
  53.      * @private
  54.      * called by this.updateTask
  55.      */
  56.     fireUpdate : function () {
  57.         this.fireEvent('update', this);
  58.     },
  59.     
  60.     /**
  61.      * Get and return the value of the filter.
  62.      * @return {String} The value of this filter
  63.      */
  64.     getValue : function () {
  65.         var result = {}, key, field;
  66.         for (key in this.fields) {
  67.             field = this.fields[key];
  68.             if (field.isValid() && String(field.getValue()).length > 0) {
  69.                 result[key] = field.getValue();
  70.             }
  71.         }
  72.         return result;
  73.     },
  74.   
  75.     /**
  76.      * Set the value of this menu and fires the 'update' event.
  77.      * @param {Object} data The data to assign to this menu
  78.      */
  79.     setValue : function (data) {
  80.         var key;
  81.         for (key in this.fields) {
  82.             this.fields[key].setValue(data[key] !== undefined ? data[key] : '');
  83.         }
  84.         this.fireEvent('update', this);
  85.     },
  86.     /**  
  87.      * @private
  88.      * Handler method called when there is a keyup event on an input
  89.      * item of this menu.
  90.      */
  91.     onInputKeyUp : function (field, e) {
  92.         var k = e.getKey();
  93.         if (k == e.RETURN && field.isValid()) {
  94.             e.stopEvent();
  95.             this.hide(true);
  96.             return;
  97.         }
  98.         
  99.         if (field == this.fields.eq) {
  100.             if (this.fields.gt) {
  101.                 this.fields.gt.setValue(null);
  102.             }
  103.             if (this.fields.lt) {
  104.                 this.fields.lt.setValue(null);
  105.             }
  106.         }
  107.         else {
  108.             this.fields.eq.setValue(null);
  109.         }
  110.         
  111.         // restart the timer
  112.         this.updateTask.delay(this.updateBuffer);
  113.     }
  114. });