Sorter.js
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:2k
源码类别:

中间件编程

开发平台:

JavaScript

  1. /*!  * Ext JS Library 3.0.0  * Copyright(c) 2006-2009 Ext JS, LLC  * licensing@extjs.com  * http://www.extjs.com/license  */ /**
  2.  * @class Ext.ListView.Sorter
  3.  * @extends Ext.util.Observable
  4.  * <p>Supporting Class for Ext.ListView.</p>
  5.  * @constructor
  6.  * @param {Object} config
  7.  */
  8. Ext.ListView.Sorter = Ext.extend(Ext.util.Observable, {
  9.     /**
  10.      * @cfg {Array} sortClasses
  11.      * The CSS classes applied to a header when it is sorted. (defaults to <tt>["sort-asc", "sort-desc"]</tt>)
  12.      */
  13.     sortClasses : ["sort-asc", "sort-desc"],
  14.     constructor: function(config){
  15.         Ext.apply(this, config);
  16.         Ext.ListView.Sorter.superclass.constructor.call(this);
  17.     },
  18.     init : function(listView){
  19.         this.view = listView;
  20.         listView.on('render', this.initEvents, this);
  21.     },
  22.     initEvents : function(view){
  23.         view.mon(view.innerHd, 'click', this.onHdClick, this);
  24.         view.innerHd.setStyle('cursor', 'pointer');
  25.         view.mon(view.store, 'datachanged', this.updateSortState, this);
  26.         this.updateSortState.defer(10, this, [view.store]);
  27.     },
  28.     updateSortState : function(store){
  29.         var state = store.getSortState();
  30.         if(!state){
  31.             return;
  32.         }
  33.         this.sortState = state;
  34.         var cs = this.view.columns, sortColumn = -1;
  35.         for(var i = 0, len = cs.length; i < len; i++){
  36.             if(cs[i].dataIndex == state.field){
  37.                 sortColumn = i;
  38.                 break;
  39.             }
  40.         }
  41.         if(sortColumn != -1){
  42.             var sortDir = state.direction;
  43.             this.updateSortIcon(sortColumn, sortDir);
  44.         }
  45.     },
  46.     updateSortIcon : function(col, dir){
  47.         var sc = this.sortClasses;
  48.         var hds = this.view.innerHd.select('em').removeClass(sc);
  49.         hds.item(col).addClass(sc[dir == "DESC" ? 1 : 0]);
  50.     },
  51.     onHdClick : function(e){
  52.         var hd = e.getTarget('em', 3);
  53.         if(hd && !this.view.disableHeaders){
  54.             var index = this.view.findHeaderIndex(hd);
  55.             this.view.store.sort(this.view.columns[index].dataIndex);
  56.         }
  57.     }
  58. });