Upgrade to ExtJS 4.0.1 - Released 05/18/2011
[extjs.git] / docs / source / Writer.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5   <title>The source code</title>
6   <link href="../prettify/prettify.css" type="text/css" rel="stylesheet" />
7   <script type="text/javascript" src="../prettify/prettify.js"></script>
8   <style type="text/css">
9     .highlight { display: block; background-color: #ddd; }
10   </style>
11   <script type="text/javascript">
12     function highlight() {
13       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
14     }
15   </script>
16 </head>
17 <body onload="prettyPrint(); highlight();">
18   <pre class="prettyprint lang-js"><span id='Ext-data-writer-Writer-method-constructor'><span id='Ext-data-writer-Writer'>/**
19 </span></span> * @author Ed Spencer
20  * @class Ext.data.writer.Writer
21  * @extends Object
22  * 
23  * &lt;p&gt;Base Writer class used by most subclasses of {@link Ext.data.proxy.Server}. This class is
24  * responsible for taking a set of {@link Ext.data.Operation} objects and a {@link Ext.data.Request}
25  * object and modifying that request based on the Operations.&lt;/p&gt;
26  * 
27  * &lt;p&gt;For example a Ext.data.writer.Json would format the Operations and their {@link Ext.data.Model} 
28  * instances based on the config options passed to the JsonWriter's constructor.&lt;/p&gt;
29  * 
30  * &lt;p&gt;Writers are not needed for any kind of local storage - whether via a
31  * {@link Ext.data.proxy.WebStorage Web Storage proxy} (see {@link Ext.data.proxy.LocalStorage localStorage}
32  * and {@link Ext.data.proxy.SessionStorage sessionStorage}) or just in memory via a
33  * {@link Ext.data.proxy.Memory MemoryProxy}.&lt;/p&gt;
34  * 
35  * @constructor
36  * @param {Object} config Optional config object
37  */
38 Ext.define('Ext.data.writer.Writer', {
39     alias: 'writer.base',
40     alternateClassName: ['Ext.data.DataWriter', 'Ext.data.Writer'],
41     
42 <span id='Ext-data-writer-Writer-cfg-writeAllFields'>    /**
43 </span>     * @cfg {Boolean} writeAllFields True to write all fields from the record to the server. If set to false it
44      * will only send the fields that were modified. Defaults to &lt;tt&gt;true&lt;/tt&gt;. Note that any fields that have
45      * {@link Ext.data.Field#persist} set to false will still be ignored.
46      */
47     writeAllFields: true,
48     
49 <span id='Ext-data-writer-Writer-cfg-nameProperty'>    /**
50 </span>     * @cfg {String} nameProperty This property is used to read the key for each value that will be sent to the server.
51      * For example:
52      * &lt;pre&gt;&lt;code&gt;
53 Ext.define('Person', {
54     extend: 'Ext.data.Model',
55     fields: [{
56         name: 'first',
57         mapping: 'firstName'
58     }, {
59         name: 'last',
60         mapping: 'lastName'
61     }, {
62         name: 'age'
63     }]
64 });
65 new Ext.data.writer.Writer({
66     writeAllFields: true,
67     nameProperty: 'mapping'
68 });
69
70 // This will be sent to the server
71 {
72     firstName: 'first name value',
73     lastName: 'last name value',
74     age: 1
75 }
76
77      * &lt;/code&gt;&lt;/pre&gt;
78      * Defaults to &lt;tt&gt;name&lt;/tt&gt;. If the value is not present, the field name will always be used.
79      */
80     nameProperty: 'name',
81
82     constructor: function(config) {
83         Ext.apply(this, config);
84     },
85
86 <span id='Ext-data-writer-Writer-method-write'>    /**
87 </span>     * Prepares a Proxy's Ext.data.Request object
88      * @param {Ext.data.Request} request The request object
89      * @return {Ext.data.Request} The modified request object
90      */
91     write: function(request) {
92         var operation = request.operation,
93             records   = operation.records || [],
94             len       = records.length,
95             i         = 0,
96             data      = [];
97
98         for (; i &lt; len; i++) {
99             data.push(this.getRecordData(records[i]));
100         }
101         return this.writeRecords(request, data);
102     },
103
104 <span id='Ext-data-writer-Writer-method-getRecordData'>    /**
105 </span>     * Formats the data for each record before sending it to the server. This
106      * method should be overridden to format the data in a way that differs from the default.
107      * @param {Object} record The record that we are writing to the server.
108      * @return {Object} An object literal of name/value keys to be written to the server.
109      * By default this method returns the data property on the record.
110      */
111     getRecordData: function(record) {
112         var isPhantom = record.phantom === true,
113             writeAll = this.writeAllFields || isPhantom,
114             nameProperty = this.nameProperty,
115             fields = record.fields,
116             data = {},
117             changes,
118             name,
119             field,
120             key;
121         
122         if (writeAll) {
123             fields.each(function(field){
124                 if (field.persist) {
125                     name = field[nameProperty] || field.name;
126                     data[name] = record.get(field.name);
127                 }
128             });
129         } else {
130             // Only write the changes
131             changes = record.getChanges();
132             for (key in changes) {
133                 if (changes.hasOwnProperty(key)) {
134                     field = fields.get(key);
135                     name = field[nameProperty] || field.name;
136                     data[name] = changes[key];
137                 }
138             }
139             if (!isPhantom) {
140                 // always include the id for non phantoms
141                 data[record.idProperty] = record.getId();
142             }
143         }
144         return data;
145     }
146 });
147 </pre>
148 </body>
149 </html>