dojox
Version:
Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.
63 lines (60 loc) • 2.4 kB
JavaScript
define(["dojo/_base/declare", "dojo/_base/lang", "dojo/Stateful"],
function(declare, lang, Stateful){
return declare("dojox.widget._Invalidating", Stateful, {
// summary:
// Base class for classes (usually widgets) that watch invalidated properties and delay the rendering
// after these properties modifications to the next execution frame.
// invalidatingPoperties: String[]
// The list of properties to watch for to trigger invalidation. This list must be initialized in the
// constructor. Default value is null.
invalidatingProperties: null,
// invalidRenderering: Boolean
// Whether the rendering is invalid or not. This is a readonly information, one must call
// invalidateRendering to modify this flag.
invalidRendering: false,
postscript: function(mixin){
this.inherited(arguments);
if(this.invalidatingProperties){
var props = this.invalidatingProperties;
for(var i = 0; i < props.length; i++){
this.watch(props[i], lang.hitch(this, this.invalidateRendering));
if(mixin && props[i] in mixin){
// if the prop happens to have been passed in the ctor mixin we are invalidated
this.invalidateRendering();
}
}
}
},
addInvalidatingProperties: function(/*String[]*/ properties){
// summary:
// Add properties to the watched properties to trigger invalidation. This method must be called in
// the constructor. It is typically used by subclasses of a _Invalidating class to add more properties
// to watch for.
// properties:
// The list of properties to watch for.
this.invalidatingProperties = this.invalidatingProperties?this.invalidatingProperties.concat(properties):properties;
},
invalidateRendering: function(){
// summary:
// Invalidating the rendering for the next executation frame.
if(!this.invalidRendering){
this.invalidRendering = true;
setTimeout(lang.hitch(this, this.validateRendering), 0);
}
},
validateRendering: function(){
// summary:
// Immediately validate the rendering if it has been invalidated. You generally do not call that method yourself.
// tags:
// protected
if(this.invalidRendering){
this.refreshRendering();
this.invalidRendering = false;
}
},
refreshRendering: function(){
// summary:
// Actually refresh the rendering. Implementation should implement that method.
}
});
});