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

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.     /**
  3.      * Handler specified for the 'Available' column renderer
  4.      * @param {Object} value
  5.      */
  6.     function formatDate(value){
  7.         return value ? value.dateFormat('M d, Y') : '';
  8.     }
  9.     // shorthand alias
  10.     var fm = Ext.form;
  11.     // the check column is created using a custom plugin
  12.     var checkColumn = new Ext.grid.CheckColumn({
  13.        header: 'Indoor?',
  14.        dataIndex: 'indoor',
  15.        width: 55
  16.     });
  17.     // the column model has information about grid columns
  18.     // dataIndex maps the column to the specific data field in
  19.     // the data store (created below)
  20.     var cm = new Ext.grid.ColumnModel({
  21.         // specify any defaults for each column
  22.         defaults: {
  23.             sortable: true // columns are not sortable by default           
  24.         },
  25.         columns: [
  26.             {
  27.                 id: 'common',
  28.                 header: 'Common Name',
  29.                 dataIndex: 'common',
  30.                 width: 220,
  31.                 // use shorthand alias defined above
  32.                 editor: new fm.TextField({
  33.                     allowBlank: false
  34.                 })
  35.             }, {
  36.                 header: 'Light',
  37.                 dataIndex: 'light',
  38.                 width: 130,
  39.                 editor: new fm.ComboBox({
  40.                     typeAhead: true,
  41.                     triggerAction: 'all',
  42.                     // transform the data already specified in html
  43.                     transform: 'light',
  44.                     lazyRender: true,
  45.                     listClass: 'x-combo-list-small'
  46.                 })
  47.             }, {
  48.                 header: 'Price',
  49.                 dataIndex: 'price',
  50.                 width: 70,
  51.                 align: 'right',
  52.                 renderer: 'usMoney',
  53.                 editor: new fm.NumberField({
  54.                     allowBlank: false,
  55.                     allowNegative: false,
  56.                     maxValue: 100000
  57.                 })
  58.             }, {
  59.                 header: 'Available',
  60.                 dataIndex: 'availDate',
  61.                 width: 95,
  62.                 renderer: formatDate,
  63.                 editor: new fm.DateField({
  64.                     format: 'm/d/y',
  65.                     minValue: '01/01/06',
  66.                     disabledDays: [0, 6],
  67.                     disabledDaysText: 'Plants are not available on the weekends'
  68.                 })
  69.             },
  70.             checkColumn // the plugin instance
  71.         ]
  72.     });
  73.     // create the Data Store
  74.     var store = new Ext.data.Store({
  75.         // destroy the store if the grid is destroyed
  76.         autoDestroy: true,
  77.         
  78.         // load remote data using HTTP
  79.         url: 'plants.xml',
  80.         // specify a XmlReader (coincides with the XML format of the returned data)
  81.         reader: new Ext.data.XmlReader({
  82.             // records will have a 'plant' tag
  83.             record: 'plant',
  84.             // use an Array of field definition objects to implicitly create a Record constructor
  85.             fields: [
  86.                 // the 'name' below matches the tag name to read, except 'availDate'
  87.                 // which is mapped to the tag 'availability'
  88.                 {name: 'common', type: 'string'},
  89.                 {name: 'botanical', type: 'string'},
  90.                 {name: 'light'},
  91.                 {name: 'price', type: 'float'},             
  92.                 // dates can be automatically converted by specifying dateFormat
  93.                 {name: 'availDate', mapping: 'availability', type: 'date', dateFormat: 'm/d/Y'},
  94.                 {name: 'indoor', type: 'bool'}
  95.             ]
  96.         }),
  97.         sortInfo: {field:'common', direction:'ASC'}
  98.     });
  99.     // create the editor grid
  100.     var grid = new Ext.grid.EditorGridPanel({
  101.         store: store,
  102.         cm: cm,
  103.         renderTo: 'editor-grid',
  104.         width: 600,
  105.         height: 300,
  106.         autoExpandColumn: 'common', // column with this id will be expanded
  107.         title: 'Edit Plants?',
  108.         frame: true,
  109.         // specify the check column plugin on the grid so the plugin is initialized
  110.         plugins: checkColumn,
  111.         clicksToEdit: 1,
  112.         tbar: [{
  113.             text: 'Add Plant',
  114.             handler : function(){
  115.                 // access the Record constructor through the grid's store
  116.                 var Plant = grid.getStore().recordType;
  117.                 var p = new Plant({
  118.                     common: 'New Plant 1',
  119.                     light: 'Mostly Shade',
  120.                     price: 0,
  121.                     availDate: (new Date()).clearTime(),
  122.                     indoor: false
  123.                 });
  124.                 grid.stopEditing();
  125.                 store.insert(0, p);
  126.                 grid.startEditing(0, 0);
  127.             }
  128.         }]
  129.     });
  130.     // manually trigger the data store load
  131.     store.load({
  132.         // store loading is asynchronous, use a load listener or callback to handle results
  133.         callback: function(){
  134.             Ext.Msg.show({
  135.                 title: 'Store Load Callback',
  136.                 msg: 'store was loaded, data available for processing',
  137.                 modal: false,
  138.                 icon: Ext.Msg.INFO,
  139.                 buttons: Ext.Msg.OK
  140.             });
  141.         }
  142.     });
  143. });