-<!DOCTYPE html><html><head><title>Sencha Documentation Project</title><link rel="stylesheet" href="../reset.css" type="text/css"><link rel="stylesheet" href="../prettify.css" type="text/css"><link rel="stylesheet" href="../prettify_sa.css" type="text/css"><script type="text/javascript" src="../prettify.js"></script></head><body onload="prettyPrint()"><pre class="prettyprint"><pre><span id='Ext-data.Operation-method-constructor'><span id='Ext-data.Operation'>/**
-</span></span> * @author Ed Spencer
- * @class Ext.data.Operation
- * @extends Object
- *
- * <p>Represents a single read or write operation performed by a {@link Ext.data.proxy.Proxy Proxy}.
- * Operation objects are used to enable communication between Stores and Proxies. Application
- * developers should rarely need to interact with Operation objects directly.</p>
- *
- * <p>Several Operations can be batched together in a {@link Ext.data.Batch batch}.</p>
- *
- * @constructor
- * @param {Object} config Optional config object
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>The source code</title>
+ <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
+ <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
+ <style type="text/css">
+ .highlight { display: block; background-color: #ddd; }
+ </style>
+ <script type="text/javascript">
+ function highlight() {
+ document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
+ }
+ </script>
+</head>
+<body onload="prettyPrint(); highlight();">
+ <pre class="prettyprint lang-js"><span id='Ext-data-Operation'>/**
+</span> * @author Ed Spencer
+ *
+ * Represents a single read or write operation performed by a {@link Ext.data.proxy.Proxy Proxy}. Operation objects are
+ * used to enable communication between Stores and Proxies. Application developers should rarely need to interact with
+ * Operation objects directly.
+ *
+ * Several Operations can be batched together in a {@link Ext.data.Batch batch}.
*/
Ext.define('Ext.data.Operation', {
-<span id='Ext-data.Operation-cfg-synchronous'> /**
-</span> * @cfg {Boolean} synchronous True if this Operation is to be executed synchronously (defaults to true). This
- * property is inspected by a {@link Ext.data.Batch Batch} to see if a series of Operations can be executed in
- * parallel or not.
+<span id='Ext-data-Operation-cfg-synchronous'> /**
+</span> * @cfg {Boolean} synchronous
+ * True if this Operation is to be executed synchronously. This property is inspected by a
+ * {@link Ext.data.Batch Batch} to see if a series of Operations can be executed in parallel or not.
*/
synchronous: true,
-
-<span id='Ext-data.Operation-cfg-action'> /**
-</span> * @cfg {String} action The action being performed by this Operation. Should be one of 'create', 'read', 'update' or 'destroy'
+
+<span id='Ext-data-Operation-cfg-action'> /**
+</span> * @cfg {String} action
+ * The action being performed by this Operation. Should be one of 'create', 'read', 'update' or 'destroy'.
*/
action: undefined,
-
-<span id='Ext-data.Operation-cfg-filters'> /**
-</span> * @cfg {Array} filters Optional array of filter objects. Only applies to 'read' actions.
+
+<span id='Ext-data-Operation-cfg-filters'> /**
+</span> * @cfg {Ext.util.Filter[]} filters
+ * Optional array of filter objects. Only applies to 'read' actions.
*/
filters: undefined,
-
-<span id='Ext-data.Operation-cfg-sorters'> /**
-</span> * @cfg {Array} sorters Optional array of sorter objects. Only applies to 'read' actions.
+
+<span id='Ext-data-Operation-cfg-sorters'> /**
+</span> * @cfg {Ext.util.Sorter[]} sorters
+ * Optional array of sorter objects. Only applies to 'read' actions.
*/
sorters: undefined,
-
-<span id='Ext-data.Operation-cfg-group'> /**
-</span> * @cfg {Object} group Optional grouping configuration. Only applies to 'read' actions where grouping is desired.
+
+<span id='Ext-data-Operation-cfg-group'> /**
+</span> * @cfg {Ext.util.Grouper} group
+ * Optional grouping configuration. Only applies to 'read' actions where grouping is desired.
*/
group: undefined,
-
-<span id='Ext-data.Operation-cfg-start'> /**
-</span> * @cfg {Number} start The start index (offset), used in paging when running a 'read' action.
+
+<span id='Ext-data-Operation-cfg-start'> /**
+</span> * @cfg {Number} start
+ * The start index (offset), used in paging when running a 'read' action.
*/
start: undefined,
-
-<span id='Ext-data.Operation-cfg-limit'> /**
-</span> * @cfg {Number} limit The number of records to load. Used on 'read' actions when paging is being used.
+
+<span id='Ext-data-Operation-cfg-limit'> /**
+</span> * @cfg {Number} limit
+ * The number of records to load. Used on 'read' actions when paging is being used.
*/
limit: undefined,
-
-<span id='Ext-data.Operation-cfg-batch'> /**
-</span> * @cfg {Ext.data.Batch} batch The batch that this Operation is a part of (optional)
+
+<span id='Ext-data-Operation-cfg-batch'> /**
+</span> * @cfg {Ext.data.Batch} batch
+ * The batch that this Operation is a part of.
*/
batch: undefined,
-
-<span id='Ext-data.Operation-property-started'> /**
-</span> * Read-only property tracking the start status of this Operation. Use {@link #isStarted}.
- * @property started
- * @type Boolean
+
+<span id='Ext-data-Operation-cfg-callback'> /**
+</span> * @cfg {Function} callback
+ * Function to execute when operation completed. Will be called with the following parameters:
+ *
+ * - records : Array of Ext.data.Model objects.
+ * - operation : The Ext.data.Operation itself.
+ * - success : True when operation completed successfully.
+ */
+ callback: undefined,
+
+<span id='Ext-data-Operation-cfg-scope'> /**
+</span> * @cfg {Object} scope
+ * Scope for the {@link #callback} function.
+ */
+ scope: undefined,
+
+<span id='Ext-data-Operation-property-started'> /**
+</span> * @property {Boolean} started
+ * Read-only property tracking the start status of this Operation. Use {@link #isStarted}.
* @private
*/
started: false,
-
-<span id='Ext-data.Operation-property-running'> /**
-</span> * Read-only property tracking the run status of this Operation. Use {@link #isRunning}.
- * @property running
- * @type Boolean
+
+<span id='Ext-data-Operation-property-running'> /**
+</span> * @property {Boolean} running
+ * Read-only property tracking the run status of this Operation. Use {@link #isRunning}.
* @private
*/
running: false,
-
-<span id='Ext-data.Operation-property-complete'> /**
-</span> * Read-only property tracking the completion status of this Operation. Use {@link #isComplete}.
- * @property complete
- * @type Boolean
+
+<span id='Ext-data-Operation-property-complete'> /**
+</span> * @property {Boolean} complete
+ * Read-only property tracking the completion status of this Operation. Use {@link #isComplete}.
* @private
*/
complete: false,
-
-<span id='Ext-data.Operation-property-success'> /**
-</span> * Read-only property tracking whether the Operation was successful or not. This starts as undefined and is set to true
+
+<span id='Ext-data-Operation-property-success'> /**
+</span> * @property {Boolean} success
+ * Read-only property tracking whether the Operation was successful or not. This starts as undefined and is set to true
* or false by the Proxy that is executing the Operation. It is also set to false by {@link #setException}. Use
* {@link #wasSuccessful} to query success status.
- * @property success
- * @type Boolean
* @private
*/
success: undefined,
-
-<span id='Ext-data.Operation-property-exception'> /**
-</span> * Read-only property tracking the exception status of this Operation. Use {@link #hasException} and see {@link #getError}.
- * @property exception
- * @type Boolean
+
+<span id='Ext-data-Operation-property-exception'> /**
+</span> * @property {Boolean} exception
+ * Read-only property tracking the exception status of this Operation. Use {@link #hasException} and see {@link #getError}.
* @private
*/
exception: false,
-
-<span id='Ext-data.Operation-property-error'> /**
-</span> * The error object passed when {@link #setException} was called. This could be any object or primitive.
- * @property error
- * @type Mixed
+
+<span id='Ext-data-Operation-property-error'> /**
+</span> * @property {String/Object} error
+ * The error object passed when {@link #setException} was called. This could be any object or primitive.
* @private
*/
error: undefined,
-
+
+<span id='Ext-data-Operation-property-actionCommitRecordsRe'> /**
+</span> * @property {RegExp} actionCommitRecordsRe
+ * The RegExp used to categorize actions that require record commits.
+ */
+ actionCommitRecordsRe: /^(?:create|update)$/i,
+
+<span id='Ext-data-Operation-property-actionSkipSyncRe'> /**
+</span> * @property {RegExp} actionSkipSyncRe
+ * The RegExp used to categorize actions that skip local record synchronization. This defaults
+ * to match 'destroy'.
+ */
+ actionSkipSyncRe: /^destroy$/i,
+
+<span id='Ext-data-Operation-method-constructor'> /**
+</span> * Creates new Operation object.
+ * @param {Object} config (optional) Config object.
+ */
constructor: function(config) {
Ext.apply(this, config || {});
},
-
-<span id='Ext-data.Operation-method-setStarted'> /**
-</span> * Marks the Operation as started
+
+<span id='Ext-data-Operation-method-commitRecords'> /**
+</span> * This method is called to commit data to this instance's records given the records in
+ * the server response. This is followed by calling {@link Ext.data.Model#commit} on all
+ * those records (for 'create' and 'update' actions).
+ *
+ * If this {@link #action} is 'destroy', any server records are ignored and the
+ * {@link Ext.data.Model#commit} method is not called.
+ *
+ * @param {Ext.data.Model[]} serverRecords An array of {@link Ext.data.Model} objects returned by
+ * the server.
+ * @markdown
+ */
+ commitRecords: function (serverRecords) {
+ var me = this,
+ mc, index, clientRecords, serverRec, clientRec;
+
+ if (!me.actionSkipSyncRe.test(me.action)) {
+ clientRecords = me.records;
+
+ if (clientRecords && clientRecords.length) {
+ mc = Ext.create('Ext.util.MixedCollection', true, function(r) {return r.getId();});
+ mc.addAll(clientRecords);
+
+ for (index = serverRecords ? serverRecords.length : 0; index--; ) {
+ serverRec = serverRecords[index];
+ clientRec = mc.get(serverRec.getId());
+
+ if (clientRec) {
+ clientRec.beginEdit();
+ clientRec.set(serverRec.data);
+ clientRec.endEdit(true);
+ }
+ }
+
+ if (me.actionCommitRecordsRe.test(me.action)) {
+ for (index = clientRecords.length; index--; ) {
+ clientRecords[index].commit();
+ }
+ }
+ }
+ }
+ },
+
+<span id='Ext-data-Operation-method-setStarted'> /**
+</span> * Marks the Operation as started.
*/
setStarted: function() {
this.started = true;
this.running = true;
},
-
-<span id='Ext-data.Operation-method-setCompleted'> /**
-</span> * Marks the Operation as completed
+
+<span id='Ext-data-Operation-method-setCompleted'> /**
+</span> * Marks the Operation as completed.
*/
setCompleted: function() {
this.complete = true;
this.running = false;
},
-
-<span id='Ext-data.Operation-method-setSuccessful'> /**
-</span> * Marks the Operation as successful
+
+<span id='Ext-data-Operation-method-setSuccessful'> /**
+</span> * Marks the Operation as successful.
*/
setSuccessful: function() {
this.success = true;
},
-
-<span id='Ext-data.Operation-method-setException'> /**
+
+<span id='Ext-data-Operation-method-setException'> /**
</span> * Marks the Operation as having experienced an exception. Can be supplied with an option error message/object.
- * @param {Mixed} error Optional error string/object
+ * @param {String/Object} error (optional) error string/object
*/
setException: function(error) {
this.exception = true;
this.running = false;
this.error = error;
},
-
-<span id='Ext-data.Operation-method-hasException'> /**
+
+<span id='Ext-data-Operation-method-hasException'> /**
</span> * Returns true if this Operation encountered an exception (see also {@link #getError})
* @return {Boolean} True if there was an exception
*/
hasException: function() {
return this.exception === true;
},
-
-<span id='Ext-data.Operation-method-getError'> /**
+
+<span id='Ext-data-Operation-method-getError'> /**
</span> * Returns the error string or object that was set using {@link #setException}
- * @return {Mixed} The error object
+ * @return {String/Object} The error object
*/
getError: function() {
return this.error;
},
-
-<span id='Ext-data.Operation-method-getRecords'> /**
+
+<span id='Ext-data-Operation-method-getRecords'> /**
</span> * Returns an array of Ext.data.Model instances as set by the Proxy.
- * @return {Array} Any loaded Records
+ * @return {Ext.data.Model[]} Any loaded Records
*/
getRecords: function() {
var resultSet = this.getResultSet();
-
+
return (resultSet === undefined ? this.records : resultSet.records);
},
-
-<span id='Ext-data.Operation-method-getResultSet'> /**
-</span> * Returns the ResultSet object (if set by the Proxy). This object will contain the {@link Ext.data.Model model} instances
- * as well as meta data such as number of instances fetched, number available etc
+
+<span id='Ext-data-Operation-method-getResultSet'> /**
+</span> * Returns the ResultSet object (if set by the Proxy). This object will contain the {@link Ext.data.Model model}
+ * instances as well as meta data such as number of instances fetched, number available etc
* @return {Ext.data.ResultSet} The ResultSet object
*/
getResultSet: function() {
return this.resultSet;
},
-
-<span id='Ext-data.Operation-method-isStarted'> /**
-</span> * Returns true if the Operation has been started. Note that the Operation may have started AND completed,
- * see {@link #isRunning} to test if the Operation is currently running.
+
+<span id='Ext-data-Operation-method-isStarted'> /**
+</span> * Returns true if the Operation has been started. Note that the Operation may have started AND completed, see
+ * {@link #isRunning} to test if the Operation is currently running.
* @return {Boolean} True if the Operation has started
*/
isStarted: function() {
return this.started === true;
},
-
-<span id='Ext-data.Operation-method-isRunning'> /**
+
+<span id='Ext-data-Operation-method-isRunning'> /**
</span> * Returns true if the Operation has been started but has not yet completed.
* @return {Boolean} True if the Operation is currently running
*/
isRunning: function() {
return this.running === true;
},
-
-<span id='Ext-data.Operation-method-isComplete'> /**
+
+<span id='Ext-data-Operation-method-isComplete'> /**
</span> * Returns true if the Operation has been completed
* @return {Boolean} True if the Operation is complete
*/
isComplete: function() {
return this.complete === true;
},
-
-<span id='Ext-data.Operation-method-wasSuccessful'> /**
+
+<span id='Ext-data-Operation-method-wasSuccessful'> /**
</span> * Returns true if the Operation has completed and was successful
* @return {Boolean} True if successful
*/
wasSuccessful: function() {
return this.isComplete() && this.success === true;
},
-
-<span id='Ext-data.Operation-method-setBatch'> /**
+
+<span id='Ext-data-Operation-method-setBatch'> /**
</span> * @private
* Associates this Operation with a Batch
* @param {Ext.data.Batch} batch The batch
setBatch: function(batch) {
this.batch = batch;
},
-
-<span id='Ext-data.Operation-method-allowWrite'> /**
+
+<span id='Ext-data-Operation-method-allowWrite'> /**
</span> * Checks whether this operation should cause writing to occur.
* @return {Boolean} Whether the operation should cause a write to occur.
*/
allowWrite: function() {
return this.action != 'read';
}
-});</pre></pre></body></html>
\ No newline at end of file
+});</pre>
+</body>
+</html>