Upgrade to ExtJS 3.0.0 - Released 07/06/2009
[extjs.git] / docs / source / Sorter.html
1 <html>\r
2 <head>\r
3   <title>The source code</title>\r
4     <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />\r
5     <script type="text/javascript" src="../resources/prettify/prettify.js"></script>\r
6 </head>\r
7 <body  onload="prettyPrint();">\r
8     <pre class="prettyprint lang-js"><div id="cls-Ext.ListView.Sorter"></div>/**\r
9  * @class Ext.ListView.Sorter\r
10  * @extends Ext.util.Observable\r
11  * <p>Supporting Class for Ext.ListView.</p>\r
12  * @constructor\r
13  * @param {Object} config\r
14  */\r
15 Ext.ListView.Sorter = Ext.extend(Ext.util.Observable, {\r
16     <div id="cfg-Ext.ListView.Sorter-sortClasses"></div>/**\r
17      * @cfg {Array} sortClasses\r
18      * The CSS classes applied to a header when it is sorted. (defaults to <tt>["sort-asc", "sort-desc"]</tt>)\r
19      */\r
20     sortClasses : ["sort-asc", "sort-desc"],\r
21 \r
22     constructor: function(config){\r
23         Ext.apply(this, config);\r
24         Ext.ListView.Sorter.superclass.constructor.call(this);\r
25     },\r
26 \r
27     init : function(listView){\r
28         this.view = listView;\r
29         listView.on('render', this.initEvents, this);\r
30     },\r
31 \r
32     initEvents : function(view){\r
33         view.mon(view.innerHd, 'click', this.onHdClick, this);\r
34         view.innerHd.setStyle('cursor', 'pointer');\r
35         view.mon(view.store, 'datachanged', this.updateSortState, this);\r
36         this.updateSortState.defer(10, this, [view.store]);\r
37     },\r
38 \r
39     updateSortState : function(store){\r
40         var state = store.getSortState();\r
41         if(!state){\r
42             return;\r
43         }\r
44         this.sortState = state;\r
45         var cs = this.view.columns, sortColumn = -1;\r
46         for(var i = 0, len = cs.length; i < len; i++){\r
47             if(cs[i].dataIndex == state.field){\r
48                 sortColumn = i;\r
49                 break;\r
50             }\r
51         }\r
52         if(sortColumn != -1){\r
53             var sortDir = state.direction;\r
54             this.updateSortIcon(sortColumn, sortDir);\r
55         }\r
56     },\r
57 \r
58     updateSortIcon : function(col, dir){\r
59         var sc = this.sortClasses;\r
60         var hds = this.view.innerHd.select('em').removeClass(sc);\r
61         hds.item(col).addClass(sc[dir == "DESC" ? 1 : 0]);\r
62     },\r
63 \r
64     onHdClick : function(e){\r
65         var hd = e.getTarget('em', 3);\r
66         if(hd && !this.view.disableHeaders){\r
67             var index = this.view.findHeaderIndex(hd);\r
68             this.view.store.sort(this.view.columns[index].dataIndex);\r
69         }\r
70     }\r
71 });</pre>    \r
72 </body>\r
73 </html>