| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 | 
							- <!DOCTYPE html>
 
- <html>
 
- <head>
 
-   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
-   <title>The source code</title>
 
-   <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
 
-   <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
 
-   <style type="text/css">
 
-     .highlight { display: block; background-color: #ddd; }
 
-   </style>
 
-   <script type="text/javascript">
 
-     function highlight() {
 
-       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
 
-     }
 
-   </script>
 
- </head>
 
- <body onload="prettyPrint(); highlight();">
 
-   <pre class="prettyprint lang-js"><span id='Ext-data-IdGenerator'>/**
 
- </span> * @author Don Griffin
 
-  *
 
-  * This class is a base for all id generators. It also provides lookup of id generators by
 
-  * their id.
 
-  * 
 
-  * Generally, id generators are used to generate a primary key for new model instances. There
 
-  * are different approaches to solving this problem, so this mechanism has both simple use
 
-  * cases and is open to custom implementations. A {@link Ext.data.Model} requests id generation
 
-  * using the {@link Ext.data.Model#idgen} property.
 
-  *
 
-  * # Identity, Type and Shared IdGenerators
 
-  *
 
-  * It is often desirable to share IdGenerators to ensure uniqueness or common configuration.
 
-  * This is done by giving IdGenerator instances an id property by which they can be looked
 
-  * up using the {@link #get} method. To configure two {@link Ext.data.Model Model} classes
 
-  * to share one {@link Ext.data.SequentialIdGenerator sequential} id generator, you simply
 
-  * assign them the same id:
 
-  *
 
-  *     Ext.define('MyApp.data.MyModelA', {
 
-  *         extend: 'Ext.data.Model',
 
-  *         idgen: {
 
-  *             type: 'sequential',
 
-  *             id: 'foo'
 
-  *         }
 
-  *     });
 
-  *
 
-  *     Ext.define('MyApp.data.MyModelB', {
 
-  *         extend: 'Ext.data.Model',
 
-  *         idgen: {
 
-  *             type: 'sequential',
 
-  *             id: 'foo'
 
-  *         }
 
-  *     });
 
-  *
 
-  * To make this as simple as possible for generator types that are shared by many (or all)
 
-  * Models, the IdGenerator types (such as 'sequential' or 'uuid') are also reserved as
 
-  * generator id's. This is used by the {@link Ext.data.UuidGenerator} which has an id equal
 
-  * to its type ('uuid'). In other words, the following Models share the same generator:
 
-  *
 
-  *     Ext.define('MyApp.data.MyModelX', {
 
-  *         extend: 'Ext.data.Model',
 
-  *         idgen: 'uuid'
 
-  *     });
 
-  *
 
-  *     Ext.define('MyApp.data.MyModelY', {
 
-  *         extend: 'Ext.data.Model',
 
-  *         idgen: 'uuid'
 
-  *     });
 
-  *
 
-  * This can be overridden (by specifying the id explicitly), but there is no particularly
 
-  * good reason to do so for this generator type.
 
-  *
 
-  * # Creating Custom Generators
 
-  * 
 
-  * An id generator should derive from this class and implement the {@link #generate} method.
 
-  * The constructor will apply config properties on new instances, so a constructor is often
 
-  * not necessary.
 
-  *
 
-  * To register an id generator type, a derived class should provide an `alias` like so:
 
-  *
 
-  *     Ext.define('MyApp.data.CustomIdGenerator', {
 
-  *         extend: 'Ext.data.IdGenerator',
 
-  *         alias: 'idgen.custom',
 
-  *
 
-  *         configProp: 42, // some config property w/default value
 
-  *
 
-  *         generate: function () {
 
-  *             return ... // a new id
 
-  *         }
 
-  *     });
 
-  *
 
-  * Using the custom id generator is then straightforward:
 
-  *
 
-  *     Ext.define('MyApp.data.MyModel', {
 
-  *         extend: 'Ext.data.Model',
 
-  *         idgen: 'custom'
 
-  *     });
 
-  *     // or...
 
-  *
 
-  *     Ext.define('MyApp.data.MyModel', {
 
-  *         extend: 'Ext.data.Model',
 
-  *         idgen: {
 
-  *             type: 'custom',
 
-  *             configProp: value
 
-  *         }
 
-  *     });
 
-  *
 
-  * It is not recommended to mix shared generators with generator configuration. This leads
 
-  * to unpredictable results unless all configurations match (which is also redundant). In
 
-  * such cases, a custom generator with a default id is the best approach.
 
-  *
 
-  *     Ext.define('MyApp.data.CustomIdGenerator', {
 
-  *         extend: 'Ext.data.SequentialIdGenerator',
 
-  *         alias: 'idgen.custom',
 
-  *
 
-  *         id: 'custom', // shared by default
 
-  *
 
-  *         prefix: 'ID_',
 
-  *         seed: 1000
 
-  *     });
 
-  *
 
-  *     Ext.define('MyApp.data.MyModelX', {
 
-  *         extend: 'Ext.data.Model',
 
-  *         idgen: 'custom'
 
-  *     });
 
-  *
 
-  *     Ext.define('MyApp.data.MyModelY', {
 
-  *         extend: 'Ext.data.Model',
 
-  *         idgen: 'custom'
 
-  *     });
 
-  *
 
-  *     // the above models share a generator that produces ID_1000, ID_1001, etc..
 
-  *
 
-  */
 
- Ext.define('Ext.data.IdGenerator', {
 
- <span id='Ext-data-IdGenerator-property-isGenerator'>    /**
 
- </span>     * @property {Boolean} isGenerator
 
-      * `true` in this class to identify an object as an instantiated IdGenerator, or subclass thereof.
 
-      */
 
-     isGenerator: true,
 
- <span id='Ext-data-IdGenerator-method-constructor'>    /**
 
- </span>     * Initializes a new instance.
 
-      * @param {Object} config (optional) Configuration object to be applied to the new instance.
 
-      */
 
-     constructor: function(config) {
 
-         var me = this;
 
-         Ext.apply(me, config);
 
-         if (me.id) {
 
-             Ext.data.IdGenerator.all[me.id] = me;
 
-         }
 
-     },
 
- <span id='Ext-data-IdGenerator-cfg-id'>    /**
 
- </span>     * @cfg {String} id
 
-      * The id by which to register a new instance. This instance can be found using the
 
-      * {@link Ext.data.IdGenerator#get} static method.
 
-      */
 
-     getRecId: function (rec) {
 
-         return rec.modelName + '-' + rec.internalId;
 
-     },
 
- <span id='Ext-data-IdGenerator-method-generate'>    /**
 
- </span>     * Generates and returns the next id. This method must be implemented by the derived
 
-      * class.
 
-      *
 
-      * @return {String} The next id.
 
-      * @method generate
 
-      * @abstract
 
-      */
 
-     statics: {
 
- <span id='Ext-data-IdGenerator-static-property-all'>        /**
 
- </span>         * @property {Object} all
 
-          * This object is keyed by id to lookup instances.
 
-          * @private
 
-          * @static
 
-          */
 
-         all: {},
 
- <span id='Ext-data-IdGenerator-static-method-get'>        /**
 
- </span>         * Returns the IdGenerator given its config description.
 
-          * @param {String/Object} config If this parameter is an IdGenerator instance, it is
 
-          * simply returned. If this is a string, it is first used as an id for lookup and
 
-          * then, if there is no match, as a type to create a new instance. This parameter
 
-          * can also be a config object that contains a `type` property (among others) that
 
-          * are used to create and configure the instance.
 
-          * @static
 
-          */
 
-         get: function (config) {
 
-             var generator,
 
-                 id,
 
-                 type;
 
-             if (typeof config == 'string') {
 
-                 id = type = config;
 
-                 config = null;
 
-             } else if (config.isGenerator) {
 
-                 return config;
 
-             } else {
 
-                 id = config.id || config.type;
 
-                 type = config.type;
 
-             }
 
-             generator = this.all[id];
 
-             if (!generator) {
 
-                 generator = Ext.create('idgen.' + type, config);
 
-             }
 
-             return generator;
 
-         }
 
-     }
 
- });
 
- </pre>
 
- </body>
 
- </html>
 
 
  |