| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 | 
							- <!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-Batch'>/**
 
- </span> * @author Ed Spencer
 
-  * @class Ext.data.Batch
 
-  *
 
-  * <p>Provides a mechanism to run one or more {@link Ext.data.Operation operations} in a given order. Fires the 'operationcomplete' event
 
-  * after the completion of each Operation, and the 'complete' event when all Operations have been successfully executed. Fires an 'exception'
 
-  * event if any of the Operations encounter an exception.</p>
 
-  *
 
-  * <p>Usually these are only used internally by {@link Ext.data.proxy.Proxy} classes</p>
 
-  *
 
-  */
 
- Ext.define('Ext.data.Batch', {
 
-     mixins: {
 
-         observable: 'Ext.util.Observable'
 
-     },
 
- <span id='Ext-data-Batch-cfg-autoStart'>    /**
 
- </span>     * @cfg {Boolean} autoStart
 
-      * True to immediately start processing the batch as soon as it is constructed (defaults to false)
 
-      */
 
-     autoStart: false,
 
-     
 
- <span id='Ext-data-Batch-cfg-pauseOnException'>    /**
 
- </span>     * @cfg {Boolean} pauseOnException
 
-      * True to pause the execution of the batch if any operation encounters an exception
 
-      * (defaults to false). If you set this to true you are responsible for implementing the appropriate
 
-      * handling logic and restarting or discarding the batch as needed. There are different ways you could 
 
-      * do this, e.g. by handling the batch's {@link #exception} event directly, or perhaps by overriding
 
-      * {@link Ext.data.AbstractStore#onBatchException onBatchException} at the store level. If you do pause
 
-      * and attempt to handle the exception you can call {@link #retry} to process the same operation again. 
 
-      * 
 
-      * Note that {@link Ext.data.Operation operations} are atomic, so any operations that may have succeeded
 
-      * prior to an exception (and up until pausing the batch) will be finalized at the server level and will
 
-      * not be automatically reversible. Any transactional / rollback behavior that might be desired would have
 
-      * to be implemented at the application level. Pausing on exception will likely be most beneficial when
 
-      * used in coordination with such a scheme, where an exception might actually affect subsequent operations
 
-      * in the same batch and so should be handled before continuing with the next operation.
 
-      * 
 
-      * If you have not implemented transactional operation handling then this option should typically be left 
 
-      * to the default of false (e.g. process as many operations as possible, and handle any exceptions 
 
-      * asynchronously without holding up the rest of the batch).
 
-      */
 
-     pauseOnException: false,
 
- <span id='Ext-data-Batch-property-current'>    /**
 
- </span>     * @property {Number} current
 
-      * The index of the current operation being executed. Read only
 
-      */
 
-     current: -1,
 
- <span id='Ext-data-Batch-property-total'>    /**
 
- </span>     * @property {Number} total
 
-      * The total number of operations in this batch. Read only
 
-      */
 
-     total: 0,
 
- <span id='Ext-data-Batch-property-isRunning'>    /**
 
- </span>     * @property {Boolean} isRunning
 
-      * True if the batch is currently running. Read only
 
-      */
 
-     isRunning: false,
 
- <span id='Ext-data-Batch-property-isComplete'>    /**
 
- </span>     * @property {Boolean} isComplete
 
-      * True if this batch has been executed completely. Read only
 
-      */
 
-     isComplete: false,
 
- <span id='Ext-data-Batch-property-hasException'>    /**
 
- </span>     * @property {Boolean} hasException
 
-      * True if this batch has encountered an exception. This is cleared at the start of each operation. Read only
 
-      */
 
-     hasException: false,
 
- <span id='Ext-data-Batch-method-constructor'>    /**
 
- </span>     * Creates new Batch object.
 
-      * @param {Object} [config] Config object
 
-      */
 
-     constructor: function(config) {
 
-         var me = this;
 
- <span id='Ext-data-Batch-event-complete'>        /**
 
- </span>         * @event complete
 
-          * Fired when all operations of this batch have been completed
 
-          * @param {Ext.data.Batch} batch The batch object
 
-          * @param {Object} operation The last operation that was executed
 
-          */
 
- <span id='Ext-data-Batch-event-exception'>        /**
 
- </span>         * @event exception
 
-          * Fired when a operation encountered an exception
 
-          * @param {Ext.data.Batch} batch The batch object
 
-          * @param {Object} operation The operation that encountered the exception
 
-          */
 
- <span id='Ext-data-Batch-event-operationcomplete'>        /**
 
- </span>         * @event operationcomplete
 
-          * Fired when each operation of the batch completes
 
-          * @param {Ext.data.Batch} batch The batch object
 
-          * @param {Object} operation The operation that just completed
 
-          */
 
-         me.mixins.observable.constructor.call(me, config);
 
- <span id='Ext-data-Batch-property-operations'>        /**
 
- </span>         * Ordered array of operations that will be executed by this batch
 
-          * @property {Ext.data.Operation[]} operations
 
-          */
 
-         me.operations = [];
 
-         
 
- <span id='Ext-data-Batch-property-exceptions'>        /**
 
- </span>         * Ordered array of operations that raised an exception during the most recent
 
-          * batch execution and did not successfully complete
 
-          * @property {Ext.data.Operation[]} exceptions
 
-          */
 
-         me.exceptions = [];
 
-     },
 
- <span id='Ext-data-Batch-method-add'>    /**
 
- </span>     * Adds a new operation to this batch at the end of the {@link #operations} array
 
-      * @param {Object} operation The {@link Ext.data.Operation Operation} object
 
-      * @return {Ext.data.Batch} this
 
-      */
 
-     add: function(operation) {
 
-         this.total++;
 
-         operation.setBatch(this);
 
-         this.operations.push(operation);
 
-         
 
-         return this;
 
-     },
 
- <span id='Ext-data-Batch-method-start'>    /**
 
- </span>     * Kicks off execution of the batch, continuing from the next operation if the previous
 
-      * operation encountered an exception, or if execution was paused. Use this method to start
 
-      * the batch for the first time or to restart a paused batch by skipping the current
 
-      * unsuccessful operation.
 
-      * 
 
-      * To retry processing the current operation before continuing to the rest of the batch (e.g.
 
-      * because you explicitly handled the operation's exception), call {@link #retry} instead.
 
-      * 
 
-      * Note that if the batch is already running any call to start will be ignored.
 
-      * 
 
-      * @return {Ext.data.Batch} this
 
-      */
 
-     start: function(/* private */ index) {
 
-         var me = this;
 
-         
 
-         if (me.isRunning) {
 
-             return me;
 
-         }
 
-         
 
-         me.exceptions.length = 0;
 
-         me.hasException = false;
 
-         me.isRunning = true;
 
-         return me.runOperation(Ext.isDefined(index) ? index : me.current + 1);
 
-     },
 
-     
 
- <span id='Ext-data-Batch-method-retry'>    /**
 
- </span>     * Kicks off execution of the batch, continuing from the current operation. This is intended
 
-      * for restarting a {@link #pause paused} batch after an exception, and the operation that raised
 
-      * the exception will now be retried. The batch will then continue with its normal processing until
 
-      * all operations are complete or another exception is encountered.
 
-      * 
 
-      * Note that if the batch is already running any call to retry will be ignored.
 
-      * 
 
-      * @return {Ext.data.Batch} this
 
-      */
 
-     retry: function() {
 
-         return this.start(this.current);
 
-     },
 
- <span id='Ext-data-Batch-method-runNextOperation'>    /**
 
- </span>     * @private
 
-      * Runs the next operation, relative to this.current.
 
-      * @return {Ext.data.Batch} this
 
-      */
 
-     runNextOperation: function() {
 
-         return this.runOperation(this.current + 1);
 
-     },
 
- <span id='Ext-data-Batch-method-pause'>    /**
 
- </span>     * Pauses execution of the batch, but does not cancel the current operation
 
-      * @return {Ext.data.Batch} this
 
-      */
 
-     pause: function() {
 
-         this.isRunning = false;
 
-         return this;
 
-     },
 
- <span id='Ext-data-Batch-method-runOperation'>    /**
 
- </span>     * Executes an operation by its numeric index in the {@link #operations} array
 
-      * @param {Number} index The operation index to run
 
-      * @return {Ext.data.Batch} this
 
-      */
 
-     runOperation: function(index) {
 
-         var me = this,
 
-             operations = me.operations,
 
-             operation = operations[index],
 
-             onProxyReturn;
 
-         if (operation === undefined) {
 
-             me.isRunning = false;
 
-             me.isComplete = true;
 
-             me.fireEvent('complete', me, operations[operations.length - 1]);
 
-         } else {
 
-             me.current = index;
 
-             onProxyReturn = function(operation) {
 
-                 var hasException = operation.hasException();
 
-                 if (hasException) {
 
-                     me.hasException = true;
 
-                     me.exceptions.push(operation);
 
-                     me.fireEvent('exception', me, operation);
 
-                 }
 
-                 if (hasException && me.pauseOnException) {
 
-                     me.pause();
 
-                 } else {
 
-                     operation.setCompleted();
 
-                     me.fireEvent('operationcomplete', me, operation);
 
-                     me.runNextOperation();
 
-                 }
 
-             };
 
-             operation.setStarted();
 
-             me.proxy[operation.action](operation, onProxyReturn, me);
 
-         }
 
-         
 
-         return me;
 
-     }
 
- });
 
- </pre>
 
- </body>
 
- </html>
 
 
  |