ComponentMgr.js
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:7k
源码类别:

中间件编程

开发平台:

JavaScript

  1. /*!
  2.  * Ext JS Library 3.0.0
  3.  * Copyright(c) 2006-2009 Ext JS, LLC
  4.  * licensing@extjs.com
  5.  * http://www.extjs.com/license
  6.  */
  7. /**
  8.  * @class Ext.ComponentMgr
  9.  * <p>Provides a registry of all Components (instances of {@link Ext.Component} or any subclass
  10.  * thereof) on a page so that they can be easily accessed by {@link Ext.Component component}
  11.  * {@link Ext.Component#id id} (see {@link #get}, or the convenience method {@link Ext#getCmp Ext.getCmp}).</p>
  12.  * <p>This object also provides a registry of available Component <i>classes</i>
  13.  * indexed by a mnemonic code known as the Component's {@link Ext.Component#xtype xtype}.
  14.  * The <tt>{@link Ext.Component#xtype xtype}</tt> provides a way to avoid instantiating child Components
  15.  * when creating a full, nested config object for a complete Ext page.</p>
  16.  * <p>A child Component may be specified simply as a <i>config object</i>
  17.  * as long as the correct <tt>{@link Ext.Component#xtype xtype}</tt> is specified so that if and when the Component
  18.  * needs rendering, the correct type can be looked up for lazy instantiation.</p>
  19.  * <p>For a list of all available <tt>{@link Ext.Component#xtype xtypes}</tt>, see {@link Ext.Component}.</p>
  20.  * @singleton
  21.  */
  22. Ext.ComponentMgr = function(){
  23.     var all = new Ext.util.MixedCollection();
  24.     var types = {};
  25.     var ptypes = {};
  26.     return {
  27.         /**
  28.          * Registers a component.
  29.          * @param {Ext.Component} c The component
  30.          */
  31.         register : function(c){
  32.             all.add(c);
  33.         },
  34.         /**
  35.          * Unregisters a component.
  36.          * @param {Ext.Component} c The component
  37.          */
  38.         unregister : function(c){
  39.             all.remove(c);
  40.         },
  41.         /**
  42.          * Returns a component by {@link Ext.Component#id id}.
  43.          * For additional details see {@link Ext.util.MixedCollection#get}.
  44.          * @param {String} id The component {@link Ext.Component#id id}
  45.          * @return Ext.Component The Component, <tt>undefined</tt> if not found, or <tt>null</tt> if a
  46.          * Class was found.
  47.          */
  48.         get : function(id){
  49.             return all.get(id);
  50.         },
  51.         /**
  52.          * Registers a function that will be called when a specified component is added to ComponentMgr
  53.          * @param {String} id The component {@link Ext.Component#id id}
  54.          * @param {Function} fn The callback function
  55.          * @param {Object} scope The scope of the callback
  56.          */
  57.         onAvailable : function(id, fn, scope){
  58.             all.on("add", function(index, o){
  59.                 if(o.id == id){
  60.                     fn.call(scope || o, o);
  61.                     all.un("add", fn, scope);
  62.                 }
  63.             });
  64.         },
  65.         /**
  66.          * The MixedCollection used internally for the component cache. An example usage may be subscribing to
  67.          * events on the MixedCollection to monitor addition or removal.  Read-only.
  68.          * @type {MixedCollection}
  69.          */
  70.         all : all,
  71.         
  72.         /**
  73.          * Checks if a Component type is registered.
  74.          * @param {Ext.Component} xtype The mnemonic string by which the Component class may be looked up
  75.          * @return {Boolean} Whether the type is registered.
  76.          */
  77.         isRegistered : function(xtype){
  78.             return types[xtype] !== undefined;    
  79.         },
  80.         /**
  81.          * <p>Registers a new Component constructor, keyed by a new
  82.          * {@link Ext.Component#xtype}.</p>
  83.          * <p>Use this method (or its alias {@link Ext#reg Ext.reg}) to register new
  84.          * subclasses of {@link Ext.Component} so that lazy instantiation may be used when specifying
  85.          * child Components.
  86.          * see {@link Ext.Container#items}</p>
  87.          * @param {String} xtype The mnemonic string by which the Component class may be looked up.
  88.          * @param {Constructor} cls The new Component class.
  89.          */
  90.         registerType : function(xtype, cls){
  91.             types[xtype] = cls;
  92.             cls.xtype = xtype;
  93.         },
  94.         /**
  95.          * Creates a new Component from the specified config object using the
  96.          * config object's {@link Ext.component#xtype xtype} to determine the class to instantiate.
  97.          * @param {Object} config A configuration object for the Component you wish to create.
  98.          * @param {Constructor} defaultType The constructor to provide the default Component type if
  99.          * the config object does not contain a <tt>xtype</tt>. (Optional if the config contains a <tt>xtype</tt>).
  100.          * @return {Ext.Component} The newly instantiated Component.
  101.          */
  102.         create : function(config, defaultType){
  103.             return config.render ? config : new types[config.xtype || defaultType](config);
  104.         },
  105.         /**
  106.          * <p>Registers a new Plugin constructor, keyed by a new
  107.          * {@link Ext.Component#ptype}.</p>
  108.          * <p>Use this method (or its alias {@link Ext#preg Ext.preg}) to register new
  109.          * plugins for {@link Ext.Component}s so that lazy instantiation may be used when specifying
  110.          * Plugins.</p>
  111.          * @param {String} ptype The mnemonic string by which the Plugin class may be looked up.
  112.          * @param {Constructor} cls The new Plugin class.
  113.          */
  114.         registerPlugin : function(ptype, cls){
  115.             ptypes[ptype] = cls;
  116.             cls.ptype = ptype;
  117.         },
  118.         /**
  119.          * Creates a new Plugin from the specified config object using the
  120.          * config object's {@link Ext.component#ptype ptype} to determine the class to instantiate.
  121.          * @param {Object} config A configuration object for the Plugin you wish to create.
  122.          * @param {Constructor} defaultType The constructor to provide the default Plugin type if
  123.          * the config object does not contain a <tt>ptype</tt>. (Optional if the config contains a <tt>ptype</tt>).
  124.          * @return {Ext.Component} The newly instantiated Plugin.
  125.          */
  126.         createPlugin : function(config, defaultType){
  127.             return new ptypes[config.ptype || defaultType](config);
  128.         }
  129.     };
  130. }();
  131. /**
  132.  * Shorthand for {@link Ext.ComponentMgr#registerType}
  133.  * @param {String} xtype The {@link Ext.component#xtype mnemonic string} by which the Component class
  134.  * may be looked up.
  135.  * @param {Constructor} cls The new Component class.
  136.  * @member Ext
  137.  * @method reg
  138.  */
  139. Ext.reg = Ext.ComponentMgr.registerType; // this will be called a lot internally, shorthand to keep the bytes down
  140. /**
  141.  * Shorthand for {@link Ext.ComponentMgr#registerPlugin}
  142.  * @param {String} ptype The {@link Ext.component#ptype mnemonic string} by which the Plugin class
  143.  * may be looked up.
  144.  * @param {Constructor} cls The new Plugin class.
  145.  * @member Ext
  146.  * @method preg
  147.  */
  148. Ext.preg = Ext.ComponentMgr.registerPlugin;
  149. Ext.create = Ext.ComponentMgr.create;