PDA

View Full Version : Ext.state.WindowNameStateProvider



john@ten4solutions
1 Jul 2009, 9:01 AM
An alternate state provider that will hold state in the window.name property. This allows state up to 2 megs (?? needs verification -- depending on browser).

This will keep the state across reloads, but the caveats are:
* The settings are not persistent across browser sessions and are only for the current window. New tabs, closing the window, other frames will not have the same settings.
* Other code could change the window.name which would cause loss of state and possibly other bugs.


Ext.state.WindowNameStateProvider = function(config) {
Ext.state.WindowNameStateProvider.superclass.constructor.call(this);
Ext.apply(this, config);
this.state = this.readState();
};

Ext.extend(Ext.state.WindowNameStateProvider, Ext.state.Provider, {
// private
set: function(name, value) {
if (typeof value == "undefined" || value === null) {
this.clear(name);
return;
}
Ext.state.WindowNameStateProvider.superclass.set.call(this, name, value);
this.setState();
},

// private
clear: function(name) {
Ext.state.WindowNameStateProvider.superclass.clear.call(this, name);
this.setState();
},

// private
setState: function(name, value) {
window.name = Ext.util.JSON.encode(this.state || {});
},

// private
readState: function(name) {
try {
return Ext.util.JSON.decode(window.name) || {};
}
catch (e) {
return {};
}
}
});