aboutsummaryrefslogtreecommitdiff
path: root/includes/js/dojox/rpc/tests/test_dojo_data_model_persevere.html
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dojox/rpc/tests/test_dojo_data_model_persevere.html')
-rw-r--r--includes/js/dojox/rpc/tests/test_dojo_data_model_persevere.html146
1 files changed, 146 insertions, 0 deletions
diff --git a/includes/js/dojox/rpc/tests/test_dojo_data_model_persevere.html b/includes/js/dojox/rpc/tests/test_dojo_data_model_persevere.html
new file mode 100644
index 0000000..063dc9b
--- /dev/null
+++ b/includes/js/dojox/rpc/tests/test_dojo_data_model_persevere.html
@@ -0,0 +1,146 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>dojox.Grid with Dojo.Data via binding</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
+ <style type="text/css">
+ @import "../../../dojo/resources/dojo.css";
+ @import "../_grid/tundraGrid.css";
+
+ #grid, #grid2 {
+ width: 65em;
+ height: 25em;
+ padding: 1px;
+ }
+ </style>
+ <script type="text/javascript" src="../../../dojo/dojo.js"
+ djConfig="isDebug: true, debugAtAllCosts: false, parseOnLoad: true"></script>
+ <script type="text/javascript">
+ dojo.require("dojox.grid.Grid");
+ dojo.require("dojox.grid._data.model");
+ dojo.require("dojox.rpc.Service");
+ dojo.require("dojox.data.PersevereRestStore");
+ dojo.require("dojo.parser");
+ </script>
+ <script type="text/javascript">
+ function getRow(inRowIndex){
+ return ' ' + inRowIndex;
+ }
+
+
+ var layout = [
+ // view 0
+ { type: 'dojox.GridRowView', width: '20px' },
+ // view 2
+ {
+ defaultCell: { width: 8, editor: dojox.grid.editors.Input, styles: 'text-align: right;' },
+ cells: [[
+ {editor:null },
+ { }
+ ]]}
+ ];
+ var persevereServices = new dojox.rpc.Service("/persevere/SMD"); // just connect to the auto-generated SMD from persevere
+ dynaStore = new dojox.data.PersevereRestStore({service:persevereServices.dyna}); // and create a store for it
+ dataModel = new dojox.grid.data.DojoData(null,null,{rowsPerPage:12,store:dynaStore,query:"46.customers",clientSort:true});
+
+ removeItem = function() {
+ // Removes the first item in the model from the store
+ // Grid should reflect removal of the first item and items should be re-indexed
+
+ // need to specify the parent because the dynaStore is hierarchical and the grid model will
+ // call newItem without any info who the parent
+ dynaStore.parentId="46.customers";
+ dynaStore.deleteItem(dataModel.data[0].__dojo_data_item);
+ }
+
+ var i = 0;
+ addItem = function() {
+ // need to specify the parent because the dynaStore is hierarchical and the grid model will
+ // call newItem without any info who the parent
+ dynaStore.parentId="46.customers";
+ grid.addRow({firstName: "firstName", lastName: "lastName",created:new Date});
+ }
+ addItemToStore = function() {
+ // Adds a new item to the store
+ // Grid should reflect the new item.
+ dynaStore.newItem({firstName: "firstName", lastName: "lastName",created:new Date});
+ }
+ removeProperty = function() {
+ var selected = grid.selection.getSelected();
+ for (var i = 0; i < selected.length;i++) {
+ dynaStore.unsetAttribute(dataModel.getRow(selected[i]).__dojo_data_item,columns[grid.focus.cell.fieldIndex].field);
+ }
+ }
+ addProperty = function() {
+ var selected = grid.selection.getSelected();
+ if (selected.length != 1)
+ return alert("You must select one item");
+ var item = dataModel.getRow(selected[0]).__dojo_data_item;
+ console.log('select index ' + selected[0]);
+ console.log('row ' , item);
+ var key = prompt("What would you like to name the new property?","property");
+ //var valueType = prompt("What type of value would you like?","string");
+ dynaStore.setValue(item,key,"new value");
+ dataModel.findAdditionFields([item],columns);
+ }
+ refresh = function() {
+ grid.refresh();
+ }
+ dataModel.findAdditionFields = function(items,columns) {
+ var m = this.fields._nameMaps || (this.fields._nameMaps = {});
+ var fields = this.fields._fields || (this.fields._fields = []);
+ for (var i = 0; i<items.length; i++) {
+ var item = items[i];
+ for (var j in item) {
+ if (j != 'id' && j != '_id' && typeof m[j] != 'number') { // if we have not accounted for this property yet
+ m[fields.length+".idx"] = j;
+ m[j] = fields.length;
+ fields.push({name: j, key: j});
+ columns.push({field:j});
+ }
+ }
+ }
+ // console.debug("new fields:", fields);
+ layout[1].cells[0] = columns;
+ grid.setStructure(layout);
+ this.fields.set(fields);
+ this.notify("FieldsChange");
+ }
+ dataModel.processRows = function(items,request) {
+ // this overwrites the processRows function, so that the columns be can be
+ // dynamically generated based on the data. Real applications will probably
+ // be content with a more static generation of columns (like actually
+ // manually typing them out in the layout).
+ columns = [];
+ this.findAdditionFields(items,columns);
+ // do the feault behavior now
+ return dojox.grid.data.DojoData.prototype.processRows.apply(this,arguments);
+ }
+ dataModel._setupFields= function(dataItem){
+ // this is called by the super impl of processRows, but we don't want it to do anything
+ }
+
+
+ </script>
+</head>
+<body class="tundra">
+ <h5>dojox.Grid using interactive PersevereRestStore</h5>
+ <div id="controls">
+ <button onclick="dynaStore.save()">Save</button>
+ <button onclick="dynaStore.revert()">Revert</button>
+ <button onclick="refresh()">Refresh</button>&nbsp;&nbsp;&nbsp;
+ <button onclick="addItem()">Add</button>
+ <button onclick="grid.removeSelectedRows()">Remove</button>&nbsp;&nbsp;&nbsp;
+ <button onclick="addProperty()">Add Property</button>
+ <button onclick="removeProperty()">Remove Property</button>
+<!-- Testing buttons (not so good for demos) <button onclick="removeItem()">Remove (Store)</button>
+ <button onclick="addItemToStore()">Add (Store)</button>&nbsp;&nbsp;&nbsp;
+ <button onclick="grid.edit.apply()">Apply</button>
+ <button onclick="grid.edit.cancel()">Cancel</button>&nbsp;&nbsp;&nbsp; -->
+ </div>
+
+ <div id="grid" jsId="grid" dojoType="dojox.Grid" elasticView="2"
+ model="dataModel" structure="layout">
+ </div>
+</body>
+</html>