| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 | 
							- Ext.define('Writer.Form', {
 
-     extend: 'Ext.form.Panel',
 
-     alias: 'widget.writerform',
 
-     requires: ['Ext.form.field.Text'],
 
-     initComponent: function(){
 
-         this.addEvents('create');
 
-         Ext.apply(this, {
 
-             activeRecord: null,
 
-             iconCls: 'icon-user',
 
-             frame: true,
 
-             title: 'User -- All fields are required',
 
-             defaultType: 'textfield',
 
-             bodyPadding: 5,
 
-             fieldDefaults: {
 
-                 anchor: '100%',
 
-                 labelAlign: 'right'
 
-             },
 
-             items: [{
 
-                 fieldLabel: 'Email',
 
-                 name: 'email',
 
-                 allowBlank: false,
 
-                 vtype: 'email'
 
-             }, {
 
-                 fieldLabel: 'First',
 
-                 name: 'first',
 
-                 allowBlank: false
 
-             }, {
 
-                 fieldLabel: 'Last',
 
-                 name: 'last',
 
-                 allowBlank: false
 
-             }],
 
-             dockedItems: [{
 
-                 xtype: 'toolbar',
 
-                 dock: 'bottom',
 
-                 ui: 'footer',
 
-                 items: ['->', {
 
-                     iconCls: 'icon-save',
 
-                     itemId: 'save',
 
-                     text: 'Save',
 
-                     disabled: true,
 
-                     scope: this,
 
-                     handler: this.onSave
 
-                 }, {
 
-                     iconCls: 'icon-user-add',
 
-                     text: 'Create',
 
-                     scope: this,
 
-                     handler: this.onCreate
 
-                 }, {
 
-                     iconCls: 'icon-reset',
 
-                     text: 'Reset',
 
-                     scope: this,
 
-                     handler: this.onReset
 
-                 }]
 
-             }]
 
-         });
 
-         this.callParent();
 
-     },
 
-     setActiveRecord: function(record){
 
-         this.activeRecord = record;
 
-         if (record) {
 
-             this.down('#save').enable();
 
-             this.getForm().loadRecord(record);
 
-         } else {
 
-             this.down('#save').disable();
 
-             this.getForm().reset();
 
-         }
 
-     },
 
-     onSave: function(){
 
-         var active = this.activeRecord,
 
-             form = this.getForm();
 
-         if (!active) {
 
-             return;
 
-         }
 
-         if (form.isValid()) {
 
-             form.updateRecord(active);
 
-             this.onReset();
 
-         }
 
-     },
 
-     onCreate: function(){
 
-         var form = this.getForm();
 
-         if (form.isValid()) {
 
-             this.fireEvent('create', this, form.getValues());
 
-             form.reset();
 
-         }
 
-     },
 
-     onReset: function(){
 
-         this.setActiveRecord(null);
 
-         this.getForm().reset();
 
-     }
 
- });
 
- Ext.define('Writer.Grid', {
 
-     extend: 'Ext.grid.Panel',
 
-     alias: 'widget.writergrid',
 
-     requires: [
 
-         'Ext.grid.plugin.CellEditing',
 
-         'Ext.form.field.Text',
 
-         'Ext.toolbar.TextItem'
 
-     ],
 
-     initComponent: function(){
 
-         this.editing = Ext.create('Ext.grid.plugin.CellEditing');
 
-         Ext.apply(this, {
 
-             iconCls: 'icon-grid',
 
-             frame: true,
 
-             plugins: [this.editing],
 
-             dockedItems: [{
 
-                 xtype: 'toolbar',
 
-                 items: [{
 
-                     iconCls: 'icon-add',
 
-                     text: 'Add',
 
-                     scope: this,
 
-                     handler: this.onAddClick
 
-                 }, {
 
-                     iconCls: 'icon-delete',
 
-                     text: 'Delete',
 
-                     disabled: true,
 
-                     itemId: 'delete',
 
-                     scope: this,
 
-                     handler: this.onDeleteClick
 
-                 }]
 
-             }, {
 
-                 weight: 2,
 
-                 xtype: 'toolbar',
 
-                 dock: 'bottom',
 
-                 items: [{
 
-                     xtype: 'tbtext',
 
-                     text: '<b>@cfg</b>'
 
-                 }, '|', {
 
-                     text: 'autoSync',
 
-                     enableToggle: true,
 
-                     pressed: true,
 
-                     tooltip: 'When enabled, Store will execute Ajax requests as soon as a Record becomes dirty.',
 
-                     scope: this,
 
-                     toggleHandler: function(btn, pressed){
 
-                         this.store.autoSync = pressed;
 
-                     }
 
-                 }, {
 
-                     text: 'batch',
 
-                     enableToggle: true,
 
-                     pressed: true,
 
-                     tooltip: 'When enabled, Store will batch all records for each type of CRUD verb into a single Ajax request.',
 
-                     scope: this,
 
-                     toggleHandler: function(btn, pressed){
 
-                         this.store.getProxy().batchActions = pressed;
 
-                     }
 
-                 }, {
 
-                     text: 'writeAllFields',
 
-                     enableToggle: true,
 
-                     pressed: false,
 
-                     tooltip: 'When enabled, Writer will write *all* fields to the server -- not just those that changed.',
 
-                     scope: this,
 
-                     toggleHandler: function(btn, pressed){
 
-                         this.store.getProxy().getWriter().writeAllFields = pressed;
 
-                     }
 
-                 }]
 
-             }, {
 
-                 weight: 1,
 
-                 xtype: 'toolbar',
 
-                 dock: 'bottom',
 
-                 ui: 'footer',
 
-                 items: ['->', {
 
-                     iconCls: 'icon-save',
 
-                     text: 'Sync',
 
-                     scope: this,
 
-                     handler: this.onSync
 
-                 }]
 
-             }],
 
-             columns: [{
 
-                 text: 'ID',
 
-                 width: 40,
 
-                 sortable: true,
 
-                 dataIndex: 'id'
 
-             }, {
 
-                 header: 'Email',
 
-                 flex: 1,
 
-                 sortable: true,
 
-                 dataIndex: 'email',
 
-                 field: {
 
-                     type: 'textfield'
 
-                 }
 
-             }, {
 
-                 header: 'First',
 
-                 width: 100,
 
-                 sortable: true,
 
-                 dataIndex: 'first',
 
-                 field: {
 
-                     type: 'textfield'
 
-                 }
 
-             }, {
 
-                 header: 'Last',
 
-                 width: 100,
 
-                 sortable: true,
 
-                 dataIndex: 'last',
 
-                 field: {
 
-                     type: 'textfield'
 
-                 }
 
-             }]
 
-         });
 
-         this.callParent();
 
-         this.getSelectionModel().on('selectionchange', this.onSelectChange, this);
 
-     },
 
-     
 
-     onSelectChange: function(selModel, selections){
 
-         this.down('#delete').setDisabled(selections.length === 0);
 
-     },
 
-     onSync: function(){
 
-         this.store.sync();
 
-     },
 
-     onDeleteClick: function(){
 
-         var selection = this.getView().getSelectionModel().getSelection()[0];
 
-         if (selection) {
 
-             this.store.remove(selection);
 
-         }
 
-     },
 
-     onAddClick: function(){
 
-         var rec = new Writer.Person({
 
-             first: '',
 
-             last: '',
 
-             email: ''
 
-         }), edit = this.editing;
 
-         edit.cancelEdit();
 
-         this.store.insert(0, rec);
 
-         edit.startEditByPosition({
 
-             row: 0,
 
-             column: 1
 
-         });
 
-     }
 
- });
 
- Ext.define('Writer.Person', {
 
-     extend: 'Ext.data.Model',
 
-     fields: [{
 
-         name: 'id',
 
-         type: 'int',
 
-         useNull: true
 
-     }, 'email', 'first', 'last'],
 
-     validations: [{
 
-         type: 'length',
 
-         field: 'email',
 
-         min: 1
 
-     }, {
 
-         type: 'length',
 
-         field: 'first',
 
-         min: 1
 
-     }, {
 
-         type: 'length',
 
-         field: 'last',
 
-         min: 1
 
-     }]
 
- });
 
- Ext.require([
 
-     'Ext.data.*',
 
-     'Ext.tip.QuickTipManager',
 
-     'Ext.window.MessageBox'
 
- ]);
 
- Ext.onReady(function(){
 
-     Ext.tip.QuickTipManager.init();
 
-     
 
-     Ext.create('Ext.button.Button', {
 
-         margin: '0 0 20 20',
 
-         text: 'Reset sample database back to initial state',
 
-         renderTo: document.body,
 
-         tooltip: 'The sample database is stored in the session, including any changes you make. Click this button to reset the sample database to the initial state',
 
-         handler: function(){
 
-             Ext.getBody().mask('Resetting...');
 
-             Ext.Ajax.request({
 
-                 url: 'app.php/example/reset',
 
-                 callback: function(options, success, response) {
 
-                     Ext.getBody().unmask();
 
-                     
 
-                     var didReset = true,
 
-                         o;
 
-                     
 
-                     if (success) {
 
-                         try {
 
-                             o = Ext.decode(response.responseText);
 
-                             didReset = o.success === true;
 
-                         } catch (e) {
 
-                             didReset = false;
 
-                         }
 
-                     } else {
 
-                         didReset = false;
 
-                     }
 
-                     
 
-                     if (didReset) {
 
-                         store.load();
 
-                         main.down('#form').setActiveRecord(null);
 
-                         Ext.example.msg('Reset', 'Reset successful');
 
-                     } else {
 
-                         Ext.MessageBox.alert('Error', 'Unable to reset example database');
 
-                     }
 
-                     
 
-                 }
 
-             });
 
-         }
 
-     })
 
-     
 
-     var store = Ext.create('Ext.data.Store', {
 
-         model: 'Writer.Person',
 
-         autoLoad: true,
 
-         autoSync: true,
 
-         proxy: {
 
-             type: 'ajax',
 
-             api: {
 
-                 read: 'app.php/users/view',
 
-                 create: 'app.php/users/create',
 
-                 update: 'app.php/users/update',
 
-                 destroy: 'app.php/users/destroy'
 
-             },
 
-             reader: {
 
-                 type: 'json',
 
-                 successProperty: 'success',
 
-                 root: 'data',
 
-                 messageProperty: 'message'
 
-             },
 
-             writer: {
 
-                 type: 'json',
 
-                 writeAllFields: false,
 
-                 root: 'data'
 
-             },
 
-             listeners: {
 
-                 exception: function(proxy, response, operation){
 
-                     Ext.MessageBox.show({
 
-                         title: 'REMOTE EXCEPTION',
 
-                         msg: operation.getError(),
 
-                         icon: Ext.MessageBox.ERROR,
 
-                         buttons: Ext.Msg.OK
 
-                     });
 
-                 }
 
-             }
 
-         },
 
-         listeners: {
 
-             write: function(proxy, operation){
 
-                 if (operation.action == 'destroy') {
 
-                     main.child('#form').setActiveRecord(null);
 
-                 }
 
-                 Ext.example.msg(operation.action, operation.resultSet.message);
 
-             }
 
-         }
 
-     });
 
-     var main = Ext.create('Ext.container.Container', {
 
-         padding: '0 0 0 20',
 
-         width: 500,
 
-         height: 450,
 
-         renderTo: document.body,
 
-         layout: {
 
-             type: 'vbox',
 
-             align: 'stretch'
 
-         },
 
-         items: [{
 
-             itemId: 'form',
 
-             xtype: 'writerform',
 
-             height: 150,
 
-             margins: '0 0 10 0',
 
-             listeners: {
 
-                 create: function(form, data){
 
-                     store.insert(0, data);
 
-                 }
 
-             }
 
-         }, {
 
-             itemId: 'grid',
 
-             xtype: 'writergrid',
 
-             title: 'User List',
 
-             flex: 1,
 
-             store: store,
 
-             listeners: {
 
-                 selectionchange: function(selModel, selected) {
 
-                     main.child('#form').setActiveRecord(selected[0] || null);
 
-                 }
 
-             }
 
-         }]
 
-     });
 
- });
 
 
  |