// Application instance for showing user-feedback messages. var App = new Ext.App({}); // Create HttpProxy instance. Notice new configuration parameter "api" here instead of load. However, you can still use // the "url" paramater -- All CRUD requests will be directed to your single url instead. var proxy = new Ext.data.HttpProxy({ api: { read : 'app.php/users/view', create : 'app.php/users/create', update: 'app.php/users/update', destroy: 'app.php/users/destroy' } }); // Typical JsonReader. Notice additional meta-data params for defining the core attributes of your json-response var reader = new Ext.data.JsonReader({ totalProperty: 'total', successProperty: 'success', idProperty: 'id', root: 'data' }, [ {name: 'id'}, {name: 'email', allowBlank: false}, {name: 'first', allowBlank: false}, {name: 'last', allowBlank: false} ]); // The new DataWriter component. var writer = new Ext.data.JsonWriter({ encode: true, writeAllFields: false }); // Typical Store collecting the Proxy, Reader and Writer together. var store = new Ext.data.Store({ id: 'user', proxy: proxy, reader: reader, writer: writer, // <-- plug a DataWriter into the store just as you would a Reader autoSave: true, // <-- false would delay executing create, update, destroy requests until specifically told to do so with some [save] buton. listeners: { write : function(store, action, result, res, rs) { App.setAlert(res.success, res.message); // <-- show user-feedback for all write actions }, exception : function(proxy, type, action, options, res, arg) { if (type === 'remote') { Ext.Msg.show({ title: 'REMOTE EXCEPTION', msg: res.message, icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK }); } } } }); // A new generic text field var textField = new Ext.form.TextField(); // Let's pretend we rendered our grid-columns with meta-data from our ORM framework. var userColumns = [ {header: "ID", width: 40, sortable: true, dataIndex: 'id'}, {header: "Email", width: 100, sortable: true, dataIndex: 'email', editor: textField}, {header: "First", width: 50, sortable: true, dataIndex: 'first', editor: textField}, {header: "Last", width: 50, sortable: true, dataIndex: 'last', editor: textField} ]; // load the store immeditately store.load(); Ext.onReady(function() { Ext.QuickTips.init(); // create user.Form instance (@see UserForm.js) var userForm = new App.user.Form({ renderTo: 'user-form', listeners: { create : function(fpanel, data) { // <-- custom "create" event defined in App.user.Form class var rec = new userGrid.store.recordType(data); userGrid.store.insert(0, rec); } } }); // create user.Grid instance (@see UserGrid.js) var userGrid = new App.user.Grid({ renderTo: 'user-grid', store: store, columns : userColumns, listeners: { rowclick: function(g, index, ev) { var rec = g.store.getAt(index); userForm.loadRecord(rec); }, destroy : function() { userForm.getForm().reset(); } } }); });