Upgrade to ExtJS 4.0.7 - Released 10/19/2011
[extjs.git] / docs / source / Json2.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="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
7   <script type="text/javascript" src="../resources/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-Json'>/**
19 </span> * @class Ext.data.writer.Json
20  * @extends Ext.data.writer.Writer
21
22 This class is used to write {@link Ext.data.Model} data to the server in a JSON format.
23 The {@link #allowSingle} configuration can be set to false to force the records to always be
24 encoded in an array, even if there is only a single record being sent.
25
26  * @markdown
27  */
28 Ext.define('Ext.data.writer.Json', {
29     extend: 'Ext.data.writer.Writer',
30     alternateClassName: 'Ext.data.JsonWriter',
31     alias: 'writer.json',
32     
33 <span id='Ext-data-writer-Json-cfg-root'>    /**
34 </span>     * @cfg {String} root The key under which the records in this Writer will be placed. Defaults to &lt;tt&gt;undefined&lt;/tt&gt;.
35      * Example generated request, using root: 'records':
36 &lt;pre&gt;&lt;code&gt;
37 {'records': [{name: 'my record'}, {name: 'another record'}]}
38 &lt;/code&gt;&lt;/pre&gt;
39      */
40     root: undefined,
41     
42 <span id='Ext-data-writer-Json-cfg-encode'>    /**
43 </span>     * @cfg {Boolean} encode True to use Ext.encode() on the data before sending. Defaults to &lt;tt&gt;false&lt;/tt&gt;.
44      * The encode option should only be set to true when a {@link #root} is defined, because the values will be
45      * sent as part of the request parameters as opposed to a raw post. The root will be the name of the parameter
46      * sent to the server.
47      */
48     encode: false,
49     
50 <span id='Ext-data-writer-Json-cfg-allowSingle'>    /**
51 </span>     * @cfg {Boolean} allowSingle False to ensure that records are always wrapped in an array, even if there is only
52      * one record being sent. When there is more than one record, they will always be encoded into an array.
53      * Defaults to &lt;tt&gt;true&lt;/tt&gt;. Example:
54      * &lt;pre&gt;&lt;code&gt;
55 // with allowSingle: true
56 &quot;root&quot;: {
57     &quot;first&quot;: &quot;Mark&quot;,
58     &quot;last&quot;: &quot;Corrigan&quot;
59 }
60
61 // with allowSingle: false
62 &quot;root&quot;: [{
63     &quot;first&quot;: &quot;Mark&quot;,
64     &quot;last&quot;: &quot;Corrigan&quot;
65 }]
66      * &lt;/code&gt;&lt;/pre&gt;
67      */
68     allowSingle: true,
69     
70     //inherit docs
71     writeRecords: function(request, data) {
72         var root = this.root;
73         
74         if (this.allowSingle &amp;&amp; data.length == 1) {
75             // convert to single object format
76             data = data[0];
77         }
78         
79         if (this.encode) {
80             if (root) {
81                 // sending as a param, need to encode
82                 request.params[root] = Ext.encode(data);
83             } else {
84                 //&lt;debug&gt;
85                 Ext.Error.raise('Must specify a root when using encode');
86                 //&lt;/debug&gt;
87             }
88         } else {
89             // send as jsonData
90             request.jsonData = request.jsonData || {};
91             if (root) {
92                 request.jsonData[root] = data;
93             } else {
94                 request.jsonData = data;
95             }
96         }
97         return request;
98     }
99 });
100 </pre>
101 </body>
102 </html>