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

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.onReady(function(){
  2.     Ext.QuickTips.init();
  3.     
  4.     // for this demo configure local and remote urls for demo purposes
  5.     var url = {
  6.         local:  'grid-filter.json',  // static data file
  7.         remote: 'grid-filter.php'
  8.     };
  9.     // configure whether filter query is encoded or not (initially)
  10.     var encode = false;
  11.     
  12.     // configure whether filtering is performed locally or remotely (initially)
  13.     var local = true;
  14.     store = new Ext.data.JsonStore({
  15.         // store configs
  16.         autoDestroy: true,
  17.         url: (local ? url.local : url.remote),
  18.         remoteSort: false,
  19.         sortInfo: {
  20.             field: 'company',
  21.             direction: 'ASC'
  22.         },
  23.         storeId: 'myStore',
  24.         
  25.         // reader configs
  26.         idProperty: 'id',
  27.         root: 'data',
  28.         totalProperty: 'total',
  29.         fields: [{
  30.             name: 'id'
  31.         }, {
  32.             name: 'company'
  33.         }, {
  34.             name: 'price',
  35.             type: 'float'
  36.         }, {
  37.             name: 'date',
  38.             type: 'date',
  39.             dateFormat: 'Y-m-d H:i:s'
  40.         }, {
  41.             name: 'visible',
  42.             type: 'boolean'
  43.         }, {
  44.             name: 'size'
  45.         }]
  46.     });
  47.     var filters = new Ext.ux.grid.GridFilters({
  48.         // encode and local configuration options defined previously for easier reuse
  49.         encode: encode, // json encode the filter query
  50.         local: local,   // defaults to false (remote filtering)
  51.         filters: [{
  52.             type: 'numeric',
  53.             dataIndex: 'id'
  54.         }, {
  55.             type: 'string',
  56.             dataIndex: 'company',
  57.             disabled: true
  58.         }, {
  59.             type: 'numeric',
  60.             dataIndex: 'price'
  61.         }, {
  62.             type: 'date',
  63.             dataIndex: 'date'
  64.         }, {
  65.             type: 'list',
  66.             dataIndex: 'size',
  67.             options: ['small', 'medium', 'large', 'extra large'],
  68.             phpMode: true
  69.         }, {
  70.             type: 'boolean',
  71.             dataIndex: 'visible'
  72.         }]
  73.     });    
  74.     
  75.     // use a factory method to reduce code while demonstrating
  76.     // that the GridFilter plugin may be configured with or without
  77.     // the filter types (the filters may be specified on the column model
  78.     var createColModel = function (finish, start) {
  79.         var columns = [{
  80.             dataIndex: 'id',
  81.             header: 'Id',
  82.             // instead of specifying filter config just specify filterable=true
  83.             // to use store's field's type property (if type property not
  84.             // explicitly specified in store config it will be 'auto' which
  85.             // GridFilters will assume to be 'StringFilter'
  86.             filterable: true
  87.             //,filter: {type: 'numeric'}
  88.         }, {
  89.             dataIndex: 'company',
  90.             header: 'Company',
  91.             id: 'company',
  92.             filter: {
  93.                 type: 'string'
  94.                 // specify disabled to disable the filter menu
  95.                 //, disabled: true
  96.             }
  97.         }, {
  98.             dataIndex: 'price',
  99.             header: 'Price',
  100.             filter: {
  101.                 //type: 'numeric'  // specify type here or in store fields config
  102.             }
  103.         }, {
  104.             dataIndex: 'size',
  105.             header: 'Size',
  106.             filter: {
  107.                 type: 'list',
  108.                 options: ['small', 'medium', 'large', 'extra large']
  109.                 //,phpMode: true
  110.             }
  111.         }, {
  112.             dataIndex: 'date',
  113.             header: 'Date',
  114.             renderer: Ext.util.Format.dateRenderer('m/d/Y'),
  115.             filter: {
  116.                 //type: 'date'     // specify type here or in store fields config
  117.             }            
  118.         }, {
  119.             dataIndex: 'visible',
  120.             header: 'Visible',
  121.             filter: {
  122.                 //type: 'boolean'  // specify type here or in store fields config
  123.             }
  124.         }];
  125.         return new Ext.grid.ColumnModel({
  126.             columns: columns.slice(start || 0, finish),
  127.             defaults: {
  128.                 sortable: true
  129.             }
  130.         });
  131.     };
  132.     
  133.     var grid = new Ext.grid.GridPanel({
  134.         border: false,
  135.         store: store,
  136.         colModel: createColModel(4),
  137.         loadMask: true,
  138.         plugins: [filters],
  139.         autoExpandColumn: 'company',
  140.         listeners: {
  141.             render: {
  142.                 fn: function(){
  143.                     store.load({
  144.                         params: {
  145.                             start: 0,
  146.                             limit: 50
  147.                         }
  148.                     });
  149.                 }
  150.             }
  151.         },
  152.         bbar: new Ext.PagingToolbar({
  153.             store: store,
  154.             pageSize: 50,
  155.             plugins: [filters]
  156.         })
  157.     });
  158.     // add some buttons to bottom toolbar just for demonstration purposes
  159.     grid.getBottomToolbar().add([
  160.         '->',
  161.         {
  162.             text: 'Encode: ' + (encode ? 'On' : 'Off'),
  163.             tooltip: 'Toggle Filter encoding on/off',
  164.             enableToggle: true,
  165.             handler: function (button, state) {
  166.                 var encode = (grid.filters.encode===true) ? false : true;
  167.                 var text = 'Encode: ' + (encode ? 'On' : 'Off'); 
  168.                 // remove the prior parameters from the last load options
  169.                 grid.filters.cleanParams(grid.getStore().lastOptions.params);
  170.                 grid.filters.encode = encode;
  171.                 button.setText(text);
  172.                 grid.getStore().reload();
  173.             } 
  174.         },{
  175.             text: 'Local Filtering: ' + (local ? 'On' : 'Off'),
  176.             tooltip: 'Toggle Filtering between remote/local',
  177.             enableToggle: true,
  178.             handler: function (button, state) {
  179.                 var local = (grid.filters.local===true) ? false : true;
  180.                 var text = 'Local Filtering: ' + (local ? 'On' : 'Off');
  181.                 var newUrl = local ? url.local : url.remote;
  182.                  
  183.                 // update the GridFilter setting
  184.                 grid.filters.local = local;
  185.                 // bind the store again so GridFilters is listening to appropriate store event
  186.                 grid.filters.bindStore(grid.getStore());
  187.                 // update the url for the proxy
  188.                 grid.getStore().proxy.setApi('read', newUrl);
  189.                 button.setText(text);
  190.                 grid.getStore().reload();
  191.             } 
  192.         },{
  193.             text: 'All Filter Data',
  194.             tooltip: 'Get Filter Data for Grid',
  195.             handler: function () {
  196.                 var data = Ext.encode(grid.filters.getFilterData());
  197.                 Ext.Msg.alert('All Filter Data',data);
  198.             } 
  199.         },{
  200.             text: 'Clear Filter Data',
  201.             handler: function () {
  202.                 grid.filters.clearFilters();
  203.             } 
  204.         },{
  205.             text: 'Reconfigure Grid',
  206.             handler: function () {
  207.                 grid.reconfigure(store, createColModel(6));
  208.             } 
  209.         }    
  210.     ]);
  211.     var win = new Ext.Window({
  212.         title: 'Grid Filters Example',
  213.         height: 400,
  214.         width: 700,
  215.         layout: 'fit',
  216.         items: grid
  217.     }).show();
  218.     
  219. });