| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 | <!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-ComponentLoader'>/**</span> * This class is used to load content via Ajax into a {@link Ext.Component}. In general  * this class will not be instanced directly, rather a loader configuration will be passed to the * constructor of the {@link Ext.Component}. * * ## HTML Renderer * * By default, the content loaded will be processed as raw html. The response text * from the request is taken and added to the component. This can be used in * conjunction with the {@link #scripts} option to execute any inline scripts in * the resulting content. Using this renderer has the same effect as passing the * {@link Ext.Component#html} configuration option. * * ## Data Renderer * * This renderer allows content to be added by using JSON data and a {@link Ext.XTemplate}. * The content received from the response is passed to the {@link Ext.Component#update} method. * This content is run through the attached {@link Ext.Component#tpl} and the data is added to * the Component. Using this renderer has the same effect as using the {@link Ext.Component#data} * configuration in conjunction with a {@link Ext.Component#tpl}. * * ## Component Renderer * * This renderer can only be used with a {@link Ext.container.Container} and subclasses. It allows for * Components to be loaded remotely into a Container. The response is expected to be a single/series of * {@link Ext.Component} configuration objects. When the response is received, the data is decoded * and then passed to {@link Ext.container.Container#method-add}. Using this renderer has the same effect as specifying * the {@link Ext.container.Container#cfg-items} configuration on a Container. * * ## Custom Renderer * * A custom function can be passed to handle any other special case, see the {@link #renderer} option. * * ## Example Usage * *     var cmp = Ext.create('Ext.Component', { *         renderTo: Ext.getBody(), *         tpl: '{firstName} - {lastName}', *         loader: { *             url: 'myPage.php', *             renderer: 'data', *             params: { *                 userId: 1 *             } *         } *     }); * *     // call the loader manually (or use autoLoad:true instead) *     cmp.getLoader().load(); */Ext.define('Ext.ComponentLoader', {    /* Begin Definitions */    extend: 'Ext.ElementLoader',    statics: {        Renderer: {            Data: function(loader, response, active){                var success = true;                try {                    loader.getTarget().update(Ext.decode(response.responseText));                } catch (e) {                    success = false;                }                return success;            },            Component: function(loader, response, active){                var success = true,                    target = loader.getTarget(),                    items = [];                //<debug>                if (!target.isContainer) {                    Ext.Error.raise({                        target: target,                        msg: 'Components can only be loaded into a container'                    });                }                //</debug>                try {                    items = Ext.decode(response.responseText);                } catch (e) {                    success = false;                }                if (success) {                    target.suspendLayouts();                    if (active.removeAll) {                        target.removeAll();                    }                    target.add(items);                    target.resumeLayouts(true);                }                return success;            }        }    },    /* End Definitions */<span id='Ext-ComponentLoader-cfg-target'>    /**</span>     * @cfg {Ext.Component/String} target The target {@link Ext.Component} for the loader.     * If a string is passed it will be looked up via the id.     */    target: null,<span id='Ext-ComponentLoader-cfg-loadMask'>    /**</span>     * @cfg {Boolean/Object} loadMask True or a {@link Ext.LoadMask} configuration to enable masking during loading.     */    loadMask: false,<span id='Ext-ComponentLoader-cfg-scripts'>    /**</span>     * @cfg {Boolean} scripts True to parse any inline script tags in the response. This only used when using the html     * {@link #renderer}.     */<span id='Ext-ComponentLoader-cfg-renderer'>    /**</span>     * @cfg {String/Function} rendererThe type of content that is to be loaded into, which can be one of 3 types:+ **html** : Loads raw html content, see {@link Ext.Component#html}+ **data** : Loads raw html content, see {@link Ext.Component#data}+ **component** : Loads child {Ext.Component} instances. This option is only valid when used with a Container.Alternatively, you can pass a function which is called with the following parameters.+ loader - Loader instance+ response - The server response+ active - The active requestThe function must return false is loading is not successful. Below is a sample of using a custom renderer:    new Ext.Component({        loader: {            url: 'myPage.php',            renderer: function(loader, response, active) {                var text = response.responseText;                loader.getTarget().update('The response is ' + text);                return true;            }        }    });     */    renderer: 'html',<span id='Ext-ComponentLoader-method-setTarget'>    /**</span>     * Set a {Ext.Component} as the target of this loader. Note that if the target is changed,     * any active requests will be aborted.     * @param {String/Ext.Component} target The component to be the target of this loader. If a string is passed     * it will be looked up via its id.     */    setTarget: function(target){        var me = this;        if (Ext.isString(target)) {            target = Ext.getCmp(target);        }        if (me.target && me.target != target) {            me.abort();        }        me.target = target;    },    // inherit docs    removeMask: function(){        this.target.setLoading(false);    },<span id='Ext-ComponentLoader-method-addMask'>    /**</span>     * Add the mask on the target     * @private     * @param {Boolean/Object} mask The mask configuration     */    addMask: function(mask){        this.target.setLoading(mask);    },    setOptions: function(active, options){        active.removeAll = Ext.isDefined(options.removeAll) ? options.removeAll : this.removeAll;    },<span id='Ext-ComponentLoader-method-getRenderer'>    /**</span>     * Gets the renderer to use     * @private     * @param {String/Function} renderer The renderer to use     * @return {Function} A rendering function to use.     */    getRenderer: function(renderer){        if (Ext.isFunction(renderer)) {            return renderer;        }        var renderers = this.statics().Renderer;        switch (renderer) {            case 'component':                return renderers.Component;            case 'data':                return renderers.Data;            default:                return Ext.ElementLoader.Renderer.Html;        }    }});</pre></body></html>
 |