extjs-gpl
Version:
GPL licensed version of Sencha Ext JS
81 lines (71 loc) • 2.2 kB
JavaScript
/**
* A Queue is a queue of {@link Ext.app.route.Route} instances managed by the
* {@link Ext.app.route.Router} singleton if queueActions is set to `true`.
*
* A developer shouldn't need to use this class as {@link Ext.app.route.Router} should
* manage this class. When a {@link Ext.app.route.Route} is executed,it will automatically
* keep running the queue until the queue is empty.
* @private
*/
Ext.define('Ext.app.route.Queue', {
/**
* The {@link Ext.util.MixedCollection} that will hold the queued
* {@link Ext.app.route.Route} and recognized arguments.
*
* @private
*/
queue: null,
/**
* The token from the {@link Ext.app.route.Router} that is being enacted on.
*/
token: null,
constructor : function(config) {
Ext.apply(this, config);
//Create the queue MixedCollection
this.queue = new Ext.util.MixedCollection();
},
/**
* Add a {@link Ext.app.route.Route} to the queue.
*
* @param {Ext.app.route.Route} route The route to add to the queue.
* @param {Object} args The arguments recognized by the {Ext.app.route.Route}.
*/
queueAction : function (route, args) {
this.queue.add({
route : route,
args : args
});
},
/**
* Clear all queued actions.
*/
clearQueue : function() {
this.queue.removeAll();
},
/**
* Run the queue one by one.
*/
runQueue : function() {
var queue = this.queue,
action = queue.removeAt(0),
route;
if (action) {
route = action && action.route;
route.execute(this.token, action.args, this.onActionExecute, this);
}
},
/**
* Handle the execution of a queued action and optionally clear all queued actions.
*
* @param {Boolean} clearQueue If `true` was returned, will clear all queued actions.
*/
onActionExecute : function(clearQueue) {
if (clearQueue) {
//clear all queued actions
this.clearQueue();
} else {
//continue with queue execution
this.runQueue();
}
}
});