4 Ext.Loader.setPath('Ext.ux', '../ux');
15 Ext.onReady(function(){
16 // Define our data model
17 Ext.define('Employee', {
18 extend: 'Ext.data.Model',
22 { name: 'start', type: 'date', dateFormat: 'n/j/Y' },
23 { name: 'salary', type: 'float' },
24 { name: 'active', type: 'bool' }
28 // Generate mock employee data
29 var data = (function() {
30 var lasts = ['Jones', 'Smith', 'Lee', 'Wilson', 'Black', 'Williams', 'Lewis', 'Johnson', 'Foot', 'Little', 'Vee', 'Train', 'Hot', 'Mutt'],
31 firsts = ['Fred', 'Julie', 'Bill', 'Ted', 'Jack', 'John', 'Mark', 'Mike', 'Chris', 'Bob', 'Travis', 'Kelly', 'Sara'],
32 lastLen = lasts.length,
33 firstLen = firsts.length,
36 s = new Date(2007, 0, 1),
39 getRandomInt = function(min, max) {
40 return Math.floor(Math.random() * (max - min + 1)) + min;
43 generateName = function() {
44 var name = firsts[getRandomInt(0, firstLen - 1)] + ' ' + lasts[getRandomInt(0, lastLen - 1)];
45 if (usedNames[name]) {
46 return generateName();
48 usedNames[name] = true;
52 while (s.getTime() < now.getTime()) {
53 var ecount = getRandomInt(0, 3);
54 for (var i = 0; i < ecount; i++) {
55 var name = generateName();
57 start : Ext.Date.add(Ext.Date.clearTime(s, true), Ext.Date.DAY, getRandomInt(0, 27)),
59 email: name.toLowerCase().replace(' ', '.') + '@sencha-test.com',
60 active: getRandomInt(0, 1),
61 salary: Math.floor(getRandomInt(35000, 85000) / 1000) * 1000
64 s = Ext.Date.add(s, Ext.Date.MONTH, 1);
70 // create the Data Store
71 var store = Ext.create('Ext.data.Store', {
72 // destroy the store if the grid is destroyed
85 var rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {
86 clicksToMoveEditor: 1,
90 // create the grid and specify what field you want
91 // to use for the editor at each column.
92 var grid = Ext.create('Ext.grid.Panel', {
99 // defaults to textfield if no xtype is supplied
112 header: 'Start Date',
119 minValue: '01/01/2006',
120 minText: 'Cannot have a start date before the company existed!',
121 maxValue: Ext.Date.format(new Date(), 'm/d/Y')
124 xtype: 'numbercolumn',
130 xtype: 'numberfield',
136 xtype: 'checkcolumn',
142 cls: 'x-grid-checkheader-editor'
145 renderTo: 'editor-grid',
148 title: 'Employee Salaries',
151 text: 'Add Employee',
152 iconCls: 'employee-add',
153 handler : function() {
154 rowEditing.cancelEdit();
156 // Create a record instance through the ModelManager
157 var r = Ext.ModelManager.create({
159 email: 'new@sencha-test.com',
166 rowEditing.startEdit(0, 0);
169 itemId: 'removeEmployee',
170 text: 'Remove Employee',
171 iconCls: 'employee-remove',
172 handler: function() {
173 var sm = grid.getSelectionModel();
174 rowEditing.cancelEdit();
175 store.remove(sm.getSelection());
180 plugins: [rowEditing],
182 'selectionchange': function(view, records) {
183 grid.down('#removeEmployee').setDisabled(!records.length);