@qooxdoo/framework
Version:
The JS Framework for Coders
121 lines (92 loc) • 2.96 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2007-2008 1&1 Internet AG, Germany, http://www.1und1.de
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* Fabian Jakobs (fjakobs)
************************************************************************ */
/**
* This class represents a wrapper for functions, which should be called after
* the current thread of JavaScript has finished and the control is returned to
* the browser. The wrapped function will at most be called once after the control
* has been given back to the browser, independent of the number of {@link #call}
* calls.
*
* This class does not need to be disposed, although doing so will cancel any
* pending call
*
* @require(qx.util.DeferredCallManager)
*/
qx.Class.define("qx.util.DeferredCall",
{
extend : qx.core.Object,
/*
*****************************************************************************
CONSTRUCTOR
*****************************************************************************
*/
/**
* @param callback {Function} The callback
* @param context {Object?window} the context in which the function will be called.
*/
construct : function(callback, context)
{
this.base(arguments);
this.__callback = callback;
this.__context = context || null;
this.__manager = qx.util.DeferredCallManager.getInstance();
},
/*
*****************************************************************************
MEMBERS
*****************************************************************************
*/
members :
{
__callback : null,
__context : null,
__manager : null,
/**
* Prevent the callback from being called.
*/
cancel : function() {
this.__manager.cancel(this);
},
/**
* Issue a deferred call of the callback.
*/
schedule : function() {
this.__manager.schedule(this);
},
/**
* Calls the callback directly.
*/
call : function() {
if (qx.core.Environment.get("qx.debug")) {
// warn if the context is disposed
var context = this.__context;
if (context && context.isDisposed && context.isDisposed()) {
this.warn(
"The context object '" + context + "' of the defered call '" +
this + "'is already disposed."
);
}
}
this.__context ? this.__callback.apply(this.__context) : this.__callback();
}
},
/*
*****************************************************************************
DESTRUCTOR
*****************************************************************************
*/
destruct : function()
{
this.cancel();
this.__context = this.__callback = this.__manager = null;
}
});