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} renderer
- The 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 request
- The 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>
|