--- /dev/null
+<html>\r
+<head>\r
+ <title>The source code</title>\r
+ <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />\r
+ <script type="text/javascript" src="../resources/prettify/prettify.js"></script>\r
+</head>\r
+<body onload="prettyPrint();">\r
+ <pre class="prettyprint lang-js">// 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();
+ }
+ }
+ });
+});
+</pre> \r
+</body>\r
+</html>
\ No newline at end of file