X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/25ef3491bd9ae007ff1fc2b0d7943e6eaaccf775..6e39d509471fe9b4e2660e0d1631b350d0c66f40:/docs/source/DataWriter.html diff --git a/docs/source/DataWriter.html b/docs/source/DataWriter.html index c56bc623..85f5b4fe 100644 --- a/docs/source/DataWriter.html +++ b/docs/source/DataWriter.html @@ -1,17 +1,12 @@ - - - The source code - - - - -
/*!
- * Ext JS Library 3.0.3
- * Copyright(c) 2006-2009 Ext JS, LLC
- * licensing@extjs.com
- * http://www.extjs.com/license
- */
-
/** + + + + The source code + + + + +
/** * @class Ext.data.DataWriter *

Ext.data.DataWriter facilitates create, update, and destroy actions between * an Ext.data.Store and a server-side framework. A Writer enabled Store will @@ -21,34 +16,72 @@ * {@link Ext.data.JsonWriter}.

*

Creating a writer is simple:

*

-var writer = new Ext.data.JsonWriter();
+var writer = new Ext.data.JsonWriter({
+    encode: false   // <--- false causes data to be printed to jsonData config-property of Ext.Ajax#reqeust
+});
  * 
+ * *

Same old JsonReader as Ext-2.x:

+ *

+var reader = new Ext.data.JsonReader({idProperty: 'id'}, [{name: 'first'}, {name: 'last'}, {name: 'email'}]);
+ * 
+ * *

The proxy for a writer enabled store can be configured with a simple url:

*

 // Create a standard HttpProxy instance.
 var proxy = new Ext.data.HttpProxy({
-    url: 'app.php/users'
+    url: 'app.php/users'    // <--- Supports "provides"-type urls, such as '/users.json', '/products.xml' (Hello Rails/Merb)
 });
  * 
- *

For finer grained control, the proxy may also be configured with an api:

+ *

For finer grained control, the proxy may also be configured with an API:

*

-// Use the api specification
+// Maximum flexibility with the API-configuration
 var proxy = new Ext.data.HttpProxy({
     api: {
         read    : 'app.php/users/read',
         create  : 'app.php/users/create',
         update  : 'app.php/users/update',
-        destroy : 'app.php/users/destroy'
+        destroy : {  // <--- Supports object-syntax as well
+            url: 'app.php/users/destroy',
+            method: "DELETE"
+        }
     }
 });
  * 
- *

Creating a Writer enabled store:

+ *

Pulling it all together into a Writer-enabled Store:

+ *

+var store = new Ext.data.Store({
+    proxy: proxy,
+    reader: reader,
+    writer: writer,
+    autoLoad: true,
+    autoSave: true  // -- Cell-level updates.
+});
+ * 
+ *

Initiating write-actions automatically, using the existing Ext2.0 Store/Record API:

+ *

+var rec = store.getAt(0);
+rec.set('email', 'foo@bar.com');  // <--- Immediately initiates an UPDATE action through configured proxy.
+
+store.remove(rec);  // <---- Immediately initiates a DESTROY action through configured proxy.
+ * 
+ *

For record/batch updates, use the Store-configuration {@link Ext.data.Store#autoSave autoSave:false}

*

 var store = new Ext.data.Store({
     proxy: proxy,
     reader: reader,
-    writer: writer
+    writer: writer,
+    autoLoad: true,
+    autoSave: false  // -- disable cell-updates
 });
+
+var urec = store.getAt(0);
+urec.set('email', 'foo@bar.com');
+
+var drec = store.getAt(1);
+store.remove(drec);
+
+// Push the button!
+store.save();
  * 
* @constructor Create a new DataWriter * @param {Object} meta Metadata configuration options (implementation-specific) @@ -75,14 +108,15 @@ Ext.data.DataWriter.prototype = { */ listful : false, // <-- listful is actually not used internally here in DataWriter. @see Ext.data.Store#execute. -
/** - * Writes data in preparation for server-write action. Simply proxies to DataWriter#update, DataWriter#create - * DataWriter#destroy. - * @param {String} action [CREATE|UPDATE|DESTROY] - * @param {Object} params The params-hash to write-to - * @param {Record/Record[]} rs The recordset write. +
/** + * Compiles a Store recordset into a data-format defined by an extension such as {@link Ext.data.JsonWriter} or {@link Ext.data.XmlWriter} in preparation for a {@link Ext.data.Api#actions server-write action}. The first two params are similar similar in nature to {@link Ext#apply}, + * Where the first parameter is the receiver of paramaters and the second, baseParams, the source. + * @param {Object} params The request-params receiver. + * @param {Object} baseParams as defined by {@link Ext.data.Store#baseParams}. The baseParms must be encoded by the extending class, eg: {@link Ext.data.JsonWriter}, {@link Ext.data.XmlWriter}. + * @param {String} action [{@link Ext.data.Api#actions create|update|destroy}] + * @param {Record/Record[]} rs The recordset to write, the subject(s) of the write action. */ - write : function(action, params, rs) { + apply : function(params, baseParams, action, rs) { var data = [], renderer = action + 'Record'; // TODO implement @cfg listful here @@ -94,7 +128,7 @@ Ext.data.DataWriter.prototype = { else if (rs instanceof Ext.data.Record) { data = this[renderer](rs); } - this.render(action, rs, params, data); + this.render(params, baseParams, data); },
/** @@ -125,12 +159,17 @@ Ext.data.DataWriter.prototype = { */ destroyRecord : Ext.emptyFn, - /** - * Converts a Record to a hash. - * @param {Record} - * @private +
/** + * Converts a Record to a hash, taking into account the state of the Ext.data.Record along with configuration properties + * related to its rendering, such as {@link #writeAllFields}, {@link Ext.data.Record#phantom phantom}, {@link Ext.data.Record#getChanges getChanges} and + * {@link Ext.data.DataReader#idProperty idProperty} + * @param {Ext.data.Record} + * @param {Object} config NOT YET IMPLEMENTED. Will implement an exlude/only configuration for fine-control over which fields do/don't get rendered. + * @return {Object} + * @protected + * TODO Implement excludes/only configuration with 2nd param? */ - toHash : function(rec) { + toHash : function(rec, config) { var map = rec.fields.map, data = {}, raw = (this.writeAllFields === false && rec.phantom === false) ? rec.getChanges() : rec.data, @@ -151,7 +190,25 @@ Ext.data.DataWriter.prototype = { data[this.meta.idProperty] = rec.id } return data; + }, + +
/** + * Converts a {@link Ext.data.DataWriter#toHash Hashed} {@link Ext.data.Record} to fields-array array suitable + * for encoding to xml via XTemplate, eg: +
<tpl for="."><{name}>{value}</{name}</tpl>
+ * eg, non-phantom: +
{id: 1, first: 'foo', last: 'bar'} --> [{name: 'id', value: 1}, {name: 'first', value: 'foo'}, {name: 'last', value: 'bar'}]
+ * {@link Ext.data.Record#phantom Phantom} records will have had their idProperty omitted in {@link #toHash} if determined to be auto-generated. + * Non AUTOINCREMENT pks should have been protected. + * @param {Hash} data Hashed by Ext.data.DataWriter#toHash + * @return {[Object]} Array of attribute-objects. + * @protected + */ + toArray : function(data) { + var fields = []; + Ext.iterate(data, function(k, v) {fields.push({name: k, value: v});},this); + return fields; } -};
- +};
+ \ No newline at end of file