瀏覽代碼

* Updated example to use 4.x version of ExtJS (Bug ID 23978)

git-svn-id: trunk@26681 -
michael 11 年之前
父節點
當前提交
083b2d4016

+ 1 - 0
.gitattributes

@@ -2964,6 +2964,7 @@ packages/fcl-web/examples/webdata/demo/extgrid.lpi svneol=native#text/plain
 packages/fcl-web/examples/webdata/demo/extgrid.lpr svneol=native#text/plain
 packages/fcl-web/examples/webdata/demo/lazwebdata.pas svneol=native#text/plain
 packages/fcl-web/examples/webdata/demo/reglazwebdata.pp svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo/restful.css svneol=native#text/plain
 packages/fcl-web/examples/webdata/demo/wmusers.lfm svneol=native#text/plain
 packages/fcl-web/examples/webdata/demo/wmusers.pp svneol=native#text/plain
 packages/fcl-web/examples/webdata/demo2/extgrid-json.html svneol=native#text/plain

+ 14 - 6
packages/fcl-web/examples/webdata/demo/extgrid-json.html

@@ -1,11 +1,19 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 <html>
 <head>
-<title>ExtJS JSON Data demo</title>
-<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
-<script src="/ext/adapter/ext/ext-base.js"></script>
-<script src="/ext/ext-all-debug.js"></script>
-<script src="extgrid-json.js"></script>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>users insert example</title>
+    <link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css" />
+    <link rel="stylesheet" type="text/css" href="/ext/examples/shared/example.css" />
+    <link rel="stylesheet" type="text/css" href="restful.css" />
+
+    <!-- GC -->
+
+    <script type="text/javascript" src="/ext/ext-all-debug-w-comments.js"></script>
+    <script type="text/javascript" src="/ext/examples/shared/examples.js"></script>
+    <script type="text/javascript" src="extgrid-json.js"></script>
 </head>
 <body>
+    <h1>Extjs4.2 FPC2.6.0 Example</h1>
 </body>
-</html>
+</html>

+ 142 - 92
packages/fcl-web/examples/webdata/demo/extgrid-json.js

@@ -1,95 +1,145 @@
-Ext.ns('FPC');
+Ext.require(['Ext.data.*', 'Ext.grid.*']);
 
-FPC.ShowPage = function () {
-  var myproxy = new Ext.data.HttpProxy ( {
-    api : {
-      read: "extgrid.cgi/Provider/Read/name/",
-      update: "extgrid.cgi/Provider/Update/name/",
-      create: "extgrid.cgi/Provider/Insert/name/",
-      destroy: "extgrid.cgi/Provider/Delete/name/"
-    }
-  });
-  var myreader = new Ext.data.JsonReader ({
-      root: "rows",
-      idProperty: "ID",
-      messageProperty: 'message', // Must be specified here
-      fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
-  });
-  var mywriter = new Ext.data.JsonWriter({
-      encode: true,
-      writeAllFields: true,
-      idProperty: "ID"
-  });
-  var data = new Ext.data.Store({
-    proxy: myproxy,
-    reader: myreader,
-    writer: mywriter,
-    autoSave: false,
-    idProperty: "ID",
-  });
-  // Listen to errors.
-  data.addListener('exception', function(proxy, type, action, options, res) {
-    if (type === 'remote') {
-        Ext.Msg.show({
-            title: 'REMOTE EXCEPTION',
-            msg: res.message, 
-            icon: Ext.MessageBox.ERROR,
-            buttons: Ext.Msg.OK
-        });
-    }
-  });
-  data.load({ params:{start: 0, limit: 30}});
-  var grid = new Ext.grid.EditorGridPanel({
-    renderTo: Ext.getBody(),
-    frame: true,
-    title: "Known users",
-    height: 600,
-    width: 800,
-    store: data,
-    columns: [
-      {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
-      {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
-      {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
-      {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
-      {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
-    ],
-    bbar: new Ext.PagingToolbar({
-      pageSize: 30,
-      store: data,
-      displayInfo: true
-    }),
-    tbar : [{
-            text: 'Add',
-            iconCls: 'icon-add',
-            handler: function(btn, ev) {
-              var u = new grid.store.recordType();
-              grid.stopEditing();
-              grid.store.insert(0, u);
-              grid.startEditing(0, 1);
+Ext.define('Person', {
+    extend: 'Ext.data.Model',
+    fields: [{
+        name: 'ID',
+        type: 'int',
+        useNull: true
+    }, 'LOGIN', 'NAME', 'EMAIL'],
+    validations: [{
+        type: 'length',
+        field: 'LOGIN',
+        min: 1
+    }, {
+        type: 'length',
+        field: 'NAME',
+        min: 1
+    }, {
+        type: 'length',
+        field: 'EMAIL',
+        min: 1
+    }]
+});
+
+Ext.onReady(function(){
+
+    var store = Ext.create('Ext.data.Store', {
+        autoLoad: true,
+        autoSync: true,
+        model: 'Person',
+        proxy: {
+            type: 'ajax',
+
+			api: {
+				  read: "/cgi-bin/extgrid.exe/Provider/Read/",
+				  update: "/cgi-bin/extgrid.exe/Provider/Update/",
+				  create: "/cgi-bin/extgrid.exe/Provider/Insert/",
+				  destroy: "/cgi-bin/extgrid.exe/Provider/Delete/"
+			},
+
+            reader: {
+                type: 'json',
+                successProperty: 'success',
+                root: 'rows',
+                messageProperty: 'message'
             },
-            scope: grid
-        }, '-', {
-            text: 'Delete',
-            iconCls: 'icon-delete',
-            handler: function(btn, ev) {
-	      var index = grid.getSelectionModel().getSelectedCell();
-	      if (!index) {
-		  return false;
-	      }
-	      var rec = grid.store.getAt(index[0]);
-	      grid.store.remove(rec);
-	      },
-            scope: grid
-        }, '-', {
-            text: 'Save',
-            iconCls: 'icon-save',
-            handler: function(btn, ev) {
-	      grid.store.save();
-	    },
-            scope: grid
+            writer: {
+                type: 'json',
+				encode: true,
+                //writeAllFields: false,
+                root: 'rows'
+            }
+        },
+        listeners: {
+            write: function(store, operation){
+                var record = operation.getRecords()[0],
+                    name = Ext.String.capitalize(operation.action),
+                    verb;
+                    
+                if (name == 'Destroy') {
+                    record = operation.records[0];
+                    verb = 'delete';
+                } else if (name == 'Update') {
+                    verb = 'update';
+                } else if (name == 'Create') {
+                    verb = 'create';
+                }
+				Ext.example.msg(verb, Ext.String.format("{0} user: {1}", verb, record.get('NAME')));
+            }
         }
-	]
-  });
-  grid.show();
-}
-Ext.onReady(FPC.ShowPage);
+    });
+    
+    var rowEditing = Ext.create('Ext.grid.plugin.RowEditing');
+    
+    var grid = Ext.create('Ext.grid.Panel', {
+        renderTo: document.body,
+        plugins: [rowEditing],
+        width: 400,
+        height: 300,
+        frame: true,
+        title: 'Users',
+        store: store,
+        iconCls: 'icon-user',
+        columns: [
+			{
+            text: 'LOGIN',
+            flex: 1,
+            sortable: true,
+            dataIndex: 'LOGIN',
+            field: {
+                xtype: 'textfield'
+            }
+        }, {
+            header: 'NAME',
+            width: 80,
+            sortable: true,
+            dataIndex: 'NAME',
+            field: {
+                xtype: 'textfield'
+            }
+        }, {
+            text: 'EMAIL',
+            width: 80,
+            sortable: true,
+            dataIndex: 'EMAIL',
+            field: {
+                xtype: 'textfield'
+            }
+        }, {
+            text: 'LASTLOGIN',
+            width: 80,
+            sortable: true,
+            dataIndex: 'LASTLOGIN',
+            field: {
+                xtype: 'textfield'
+            }
+        }],
+        dockedItems: [{
+            xtype: 'toolbar',
+            items: [{
+                text: 'Add',
+                iconCls: 'icon-add',
+                handler: function(){
+                    // empty record
+                    store.insert(0, new Person());
+                    rowEditing.startEdit(0, 0);
+                }
+            }, '-', {
+                itemId: 'delete',
+                text: 'Delete',
+                iconCls: 'icon-delete',
+                disabled: true,
+                handler: function(){
+                    var selection = grid.getView().getSelectionModel().getSelection()[0];
+                    if (selection) {
+                        store.remove(selection);
+                    }
+                }
+            }]
+        }]
+    });
+    grid.getSelectionModel().on('selectionchange', function(selModel, selections){
+        grid.down('#delete').setDisabled(selections.length === 0);
+    });
+});

+ 23 - 0
packages/fcl-web/examples/webdata/demo/restful.css

@@ -0,0 +1,23 @@
+.icon-user {
+    background-image: url(images/user.png) !important;
+}
+
+.icon-add {
+    background-image: url(images/add.png) !important;
+}
+
+.icon-delete {
+    background-image: url(images/delete.png) !important;
+}
+
+.x-ie6 .icon-user {
+    background-image: url(images/user.gif) !important;
+}
+
+.x-ie6 .icon-add {
+    background-image: url(images/add.gif) !important;
+}
+
+.x-ie6 .icon-delete {
+    background-image: url(images/delete.gif) !important;
+}