X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/6746dc89c47ed01b165cc1152533605f97eb8e8d..refs/heads/master:/docs/source/Provider.html diff --git a/docs/source/Provider.html b/docs/source/Provider.html index 9309db59..26973749 100644 --- a/docs/source/Provider.html +++ b/docs/source/Provider.html @@ -3,8 +3,8 @@
/** - * @class Ext.state.Provider - * <p>Abstract base class for state provider implementations. The provider is responsible - * for setting values and extracting values to/from the underlying storage source. The - * storage source can vary and the details should be implemented in a subclass. For example - * a provider could use a server side database or the browser localstorage where supported.</p> +/** + * @class Ext.direct.Provider + * <p>Ext.direct.Provider is an abstract class meant to be extended.</p> * - * <p>This class provides methods for encoding and decoding <b>typed</b> variables including - * dates and defines the Provider interface. By default these methods put the value and the - * type information into a delimited string that can be stored. These should be overridden in - * a subclass if you want to change the format of the encoded value and subsequent decoding.</p> + * <p>For example Ext JS implements the following subclasses:</p> + * <pre><code> +Provider +| ++---{@link Ext.direct.JsonProvider JsonProvider} + | + +---{@link Ext.direct.PollingProvider PollingProvider} + | + +---{@link Ext.direct.RemotingProvider RemotingProvider} + * </code></pre> + * @abstract */ -Ext.define('Ext.state.Provider', { +Ext.define('Ext.direct.Provider', { + + /* Begin Definitions */ + + alias: 'direct.provider', + mixins: { observable: 'Ext.util.Observable' }, - - /** - * @cfg {String} prefix A string to prefix to items stored in the underlying state store. - * Defaults to <tt>'ext-'</tt> + + /* End Definitions */ + + /** + * @cfg {String} id + * The unique id of the provider (defaults to an {@link Ext#id auto-assigned id}). + * You should assign an id if you need to be able to access the provider later and you do + * not have an object reference available, for example: + * <pre><code> +Ext.direct.Manager.addProvider({ + type: 'polling', + url: 'php/poll.php', + id: 'poll-provider' +}); +var p = {@link Ext.direct.Manager}.{@link Ext.direct.Manager#getProvider getProvider}('poll-provider'); +p.disconnect(); + * </code></pre> */ - prefix: 'ext-', - + constructor : function(config){ - config = config || {}; var me = this; - Ext.apply(me, config); - /** - * @event statechange - * Fires when a state change occurs. - * @param {Provider} this This state provider - * @param {String} key The state key which was changed - * @param {String} value The encoded value for the state - */ - me.addEvents("statechange"); - me.state = {}; - me.mixins.observable.constructor.call(me); - }, - - /** - * Returns the current value for a key - * @param {String} name The key name - * @param {Mixed} defaultValue A default value to return if the key's value is not found - * @return {Mixed} The state data - */ - get : function(name, defaultValue){ - return typeof this.state[name] == "undefined" ? - defaultValue : this.state[name]; - }, - /** - * Clears a value from the state - * @param {String} name The key name - */ - clear : function(name){ - var me = this; - delete me.state[name]; - me.fireEvent("statechange", me, name, null); + Ext.apply(me, config); + me.addEvents( + /** + * @event connect + * Fires when the Provider connects to the server-side + * @param {Ext.direct.Provider} provider The {@link Ext.direct.Provider Provider}. + */ + 'connect', + /** + * @event disconnect + * Fires when the Provider disconnects from the server-side + * @param {Ext.direct.Provider} provider The {@link Ext.direct.Provider Provider}. + */ + 'disconnect', + /** + * @event data + * Fires when the Provider receives data from the server-side + * @param {Ext.direct.Provider} provider The {@link Ext.direct.Provider Provider}. + * @param {Ext.direct.Event} e The Ext.direct.Event type that occurred. + */ + 'data', + /** + * @event exception + * Fires when the Provider receives an exception from the server-side + */ + 'exception' + ); + me.mixins.observable.constructor.call(me, config); }, - /** - * Sets the value for a key - * @param {String} name The key name - * @param {Mixed} value The value to set + /** + * Returns whether or not the server-side is currently connected. + * Abstract method for subclasses to implement. */ - set : function(name, value){ - var me = this; - me.state[name] = value; - me.fireEvent("statechange", me, name, value); + isConnected: function(){ + return false; }, - /** - * Decodes a string previously encoded with {@link #encodeValue}. - * @param {String} value The value to decode - * @return {Mixed} The decoded value + /** + * Abstract methods for subclasses to implement. + * @method */ - decodeValue : function(value){ + connect: Ext.emptyFn, - // a -> Array - // n -> Number - // d -> Date - // b -> Boolean - // s -> String - // o -> Object - // -> Empty (null) - - var me = this, - re = /^(a|n|d|b|s|o|e)\:(.*)$/, - matches = re.exec(unescape(value)), - all, - type, - value, - keyValue; - - if(!matches || !matches[1]){ - return; // non state - } - - type = matches[1]; - value = matches[2]; - switch (type) { - case 'e': - return null; - case 'n': - return parseFloat(value); - case 'd': - return new Date(Date.parse(value)); - case 'b': - return (value == '1'); - case 'a': - all = []; - if(value != ''){ - Ext.each(value.split('^'), function(val){ - all.push(me.decodeValue(val)); - }, me); - } - return all; - case 'o': - all = {}; - if(value != ''){ - Ext.each(value.split('^'), function(val){ - keyValue = val.split('='); - all[keyValue[0]] = me.decodeValue(keyValue[1]); - }, me); - } - return all; - default: - return value; - } - }, - - /** - * Encodes a value including type information. Decode with {@link #decodeValue}. - * @param {Mixed} value The value to encode - * @return {String} The encoded value + /** + * Abstract methods for subclasses to implement. + * @method */ - encodeValue : function(value){ - var flat = '', - i = 0, - enc, - len, - key; - - if (value == null) { - return 'e:1'; - } else if(typeof value == 'number') { - enc = 'n:' + value; - } else if(typeof value == 'boolean') { - enc = 'b:' + (value ? '1' : '0'); - } else if(Ext.isDate(value)) { - enc = 'd:' + value.toGMTString(); - } else if(Ext.isArray(value)) { - for (len = value.length; i < len; i++) { - flat += this.encodeValue(value[i]); - if (i != len - 1) { - flat += '^'; - } - } - enc = 'a:' + flat; - } else if (typeof value == 'object') { - for (key in value) { - if (typeof value[key] != 'function' && value[key] !== undefined) { - flat += key + '=' + this.encodeValue(value[key]) + '^'; - } - } - enc = 'o:' + flat.substring(0, flat.length-1); - } else { - enc = 's:' + value; - } - return escape(enc); - } -});+ disconnect: Ext.emptyFn +}); +