Extjs4动态加载Panel内的组件实例

该示例基于Extjs 4.0.7版本。
像下面的代码所示,假如已经有一个Panel组件,然后我们希望这个form类型的Panel能够动态的加载显示不同的Display组件。

1. Web端代码

下面的代码截取关键部分显示:

 代码如下 复制代码
}, {
    region: 'west',
    id: 'overviewPropertyPanel',
    xtype: 'form',
    margins: '0 5 0 0',
    bodyPadding: 10,
    width: 280,
    layout: 'anchor',
     
    // The form will submit an AJAX request to this URL when submitted
    url: 'Overview',
    reader: Ext.create('Ext.data.reader.Json', {
        model: 'OverviewProperties'
    }),
     
    defaults: {
        anchor: '100%',
        xtype: 'displayfield',
        labelWidth: 120,
        style: {
            'font-weight': 'bold',
            'font-family': 'Arial'
        },
        fieldStyle: {
            'font-weight': 'bold',
            'font-family': 'Arial'
        }
    },
    loader: {
        url: 'Overview',
        renderer: 'component',
        listeners: {
            'beforeload': function() {
                Ext.getCmp('overviewPropertyPanel').removeAll();
            }
        }
    }
}, {

首先动态加载的组件有很多是通用的参数,如css等,可以将其提出放到Panel的defaults参数中,然后增加一个loader参数。loader里重要的参数介绍如下:
url: 获取数据的路径
renderer: 加载的内容的类型,有html、data、component三种。其中component对应Ext.Component组件
autoLoad: 是否自动加载
baseParams: 可以定义Request参数,每一次请求都会附带上该参数,并且不会被load方法里的params里的参数覆盖
callback: 回调函数
failure: 加载数据失败的回调函数
success: 加载数据成功的回调函数
loadMask: 加载的时候是否显示Mask
listeners: 事件(beforeload, exception, load)
上面的代码中会通过’beforeload’事件在加载新的组件之前将之前的组件全部清除掉。

可以通过下面的方法让Panel执行加载操作:

 代码如下 复制代码

Ext.getCmp('overviewPropertyPanel').load({          //property from update
    method: 'GET',
    params: {
        nodeId: getCurrentNodeId(),
        param: 'property'
    }
});

后台代码

 代码如下 复制代码

JSONArray dataArray = new JSONArray();
 
//DisplayField 1
JSONObject invNumObj = new JSONObject();
invNumObj.put("fieldLabel", "DisplayLabel 1");
invNumObj.put("name", "display1");
dataArray.add(invNumObj);
     
//DisplayField 2
JSONObject normalNumObj = new JSONObject();
normalNumObj.put("fieldLabel", "DisplayLabel 2");
normalNumObj.put("name", "display2");
dataArray.add(normalNumObj);
 
return dataArray.toString();

返回给前台的JSON数据为:

 代码如下 复制代码
[{"fieldLabel":"DisplayLabel 1","name":"display1"},{"fieldLabel":"DisplayLabel 2","name":"display2"}]

这样就可以在前台看到新加载的两个Display组件被顺利加载出来了。
..

时间: 2024-08-02 21:27:13

Extjs4动态加载Panel内的组件实例的相关文章

动态加载js、css的实例代码_javascript技巧

一.原生js: /** * 加载js和css文件 * @param jsonData.path 前缀路径 * @param jsonData.url 需要加载的js路径或css路径 * @param jsonData.type 需要加载的类型 js或css */ function loadWriteFiles(jsonData) { jsonData.path = jsonData.path != undefined ? jsonData.path : ""; if(jsonData.

jquery动态加载js三种方法实例

这里为你提供了三种动态加载js的jquery实例代码哦,由于jquery是为用户提供方便的,所以利用jquery动态加载文件只要一句话$.getScript("test.js");就OK了.   复制代码 代码如下: <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dt

使用PHP+AJAX让WordPress动态加载文章的教程_php实例

为什么要动态加载文章? 1. 快速向访客展示页面文章很容是包含大量文字和多媒体资源 (如: 图片, 视频, 音乐), 加载这些内容需要占用很多的时间. 如果你的页面上存在大量文章, 当访客发现页面久久没有加载完成就感到不耐烦. 这是动态加载文章的主要目的. 2. 让文章列表化使页面上的文章成为一个列表, 减少页面的空间占用, 访客可以方便的移动到页面下方, 提高旧文章被点击的几率. 并且你可以在页面上放置更多的文章而不用担心页面过长. 为什么不动态加载文章? 1. 对搜索引擎不友好搜索引擎优化的

jquery动态加载js三种方法实例_jquery

复制代码 代码如下: <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="

ExtJS4 动态加载TreePanel的问题

问题描述 前台代码 : store : Ext.create('Ext.data.TreeStore', {root : {id : '00',text : '民星兽药',expanded : true//nodeType : 'async'},proxy : { autoLoad:true,type : 'ajax',url : ctxpath + '/SystemManager/TreeList',reader : {type : 'json',root : 'alltrees'}Actio

javascript中动态加载js文件多种解决办法

一个比较全部在动态加方法  代码如下 复制代码 /*     动态加载js v1.0 by:dum 2012-03-17 www.111cn.net     用法:src="webJsBase.js?load=a,b"     注:加载本目录下js */ var webJsBase = {     require: function(libraryName) {         document.write('<script type="text/javascript&

ExtJS4 组件化编程,动态加载,面向对象,Direct_extjs

ExtJS4推荐定义类的时候均使用Ext.define,利用xtype动态加载 修改了以前的一个登陆窗口,感觉用官方推荐的方法还是很不错的 但还有一些问题没有想得非常清楚,先把代码贴出来一起研究下.请看代码中的注释~~ 使用Ext+.Net,用Direct模式传递数据 Default.aspx: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3

动态加载用户控件的组件

动态|加载|控件 动态加载用户控件的组件!(终结MasterPages技术) 让我们来做个页面模版吧!有了模版是不是就可以统一了呢!Sure ! 比如:模版页Template.ascx中我们留出中间一个部分,或者你想要留出的一个空间,让以后放入你想要的内容. 好了!那么在我们的页面index.aspx上我们就可以引用这个Template.ascx,然后在空出的部分放入我们特别的东西,当然最好是在空的地方我们插入另外一个页面如:List.ascx, 当然我们在做个页面MyArchive.aspx.

动态加载用户控件的组件!(三)

动态|加载|控件 上一篇文章写到动态加载用户控件的简单应用 页面是用来浏览信息的!但是更重要的是和用户交互,根据不同的需求提供不同的内容服务,这是一种服务或是一种更贴近用户的人性化.(又在胡言乱语了!^_^) 动态加载叶面,根据不同的用户权限加载不懂的内容服务.根据用户的相应加载相应的内容服务. 还有另外一个应用就是做到页面与代码的分离.在vs2003里,一般ascx或aspx文件,在刚建立的时候都直接跟一个cs文件关联.那么我们在写程序的时候就不能分开来做.作叶面和写后台代码的不能分开.为了能