extjs4.1 和struts2结合使用时延迟加载js,可使用extjs的mvc模式

直奔主题,在前台我们点击左边的菜单会先打开一个tab页,希望将请求的页面放到新打开的tab页上面:关键代码如下:

tabPanel.add({
	id: id,
	title: title,
	closable: true,
	autoScroll: true,
	layout: 'fit',
	loader: {
		scripts: true,
		autoLoad: true,
		params: params,
		url: url
	}
});

传统的方法是在tab里面嵌入一个iframe,然后在里面嵌入一个独立的页面,这样做的话会重复引入很多重复的js,而且不能共享一些公共的对象;

而上面的这种做法只会引入本次需要的js代码,达到延迟加载的目的。具体步骤为:先请求struts2的action,返回一个jsp页面,在页面上只引入本次需要的js代码

<%@ page language="java" pageEncoding="UTF-8"%>
<script type="text/javascript" src="${scripts}/UserIndex.js"></script>

返回到浏览器后会执行引入的js代码,UserIndex.js关键代码如下:

Ext.onReady(function() {
	Ext.QuickTips.init();
	var deptTree = Ext.create('auth.DepartmentTreePanel', {
		columnWidth : .3,
		height: 722,
		rootNode : {
			id : '00',
			 text :'总裁',
			 expanded : true
		 }
	});
	var queryForm = Ext.create('auth.QueryForm');
	var userGrid = Ext.create('auth.UserGrid');
	var content = Ext.create('Ext.panel.Panel', {
 		id : 'T_auth-userIndex_content',
		layout : 'column',
		 getQueryForm : function() {
			 return queryForm;
		},
 		getUserGrid : function() {
			return userGrid;
 		},
		getDeptTree : function() {
 			return deptTree;
		},
		 items : [ deptTree, {
			 xtype : 'container',
			columnWidth : .7,
 			items : [ queryForm, userGrid ]
 		}]
	});
	Ext.getCmp('T_auth-userIndex').add(content);
});

这段代码的主要意思是创建本次需要显示的panel: content,然后把content加入到我们刚才创建的tab上面,这里的T_auth-userIndex和我们上面tabPanle.add里面的id的值是一样的。

jsp中引入的js还可以用mvc来实现,例子如下:

templateIndex.jsp

<%@ page language="java" pageEncoding="UTF-8"%>  

<script type="text/javascript">
	Ext.ns("excel.TemplateIndex");
	excel.TemplateIndex.scripts="${scripts}";
</script>
<script  type="text/javascript" src="${scripts}/templateIndex/app.js"></script>

app.js

Ext.Loader.setConfig({
    enabled: true
}); 

Ext.define('excel.TemplateIndex', {
    extend: 'Ext.app.Application',
    name: 'excel_TemplateIndex',
    appFolder:excel.TemplateIndex.scripts + "/templateIndex",
    controllers: [
        'TemplateIndexController'
    ],
    launch: function() {
		Ext.getCmp('T_excel-templateIndex').add( [{
			xtype:'excel_TemplateIndexView'
		}]);
    }
});

Ext.onReady(function(){
	Ext.create("excel.TemplateIndex");
});
 

mvc的目录结构图如下:

比较两种js的写法,一个是传统的js写法,一种是mvc模式,mvc模式将逻辑和页面分开,结构清晰,便于维护。传统的写法将逻辑和页面放到一起,代码过多是会不便于维护,建议使用mvc的模式。

时间: 2024-10-15 22:26:17

extjs4.1 和struts2结合使用时延迟加载js,可使用extjs的mvc模式的相关文章

EntityFrameWork 使用时碰到的小问题

EntityFrameWork 使用时碰到的小问题 1,在使用orm访问数据库的相目里,也要引用EntityFrameWork.dll,否则无法使用orm 否则,编译错误 错误 5 "System.Data.Entity.DbSet`1<DbAccess.Entity.Dept>"不包含"Where"的定义,并且找不到可接受类型为"System.Data.Entity.DbSet`1<DbAccess.Entity.Dept>&qu

Highcharts使用时遇到的问题及解决方案

Highcharts使用时遇到的问题及解决方案 Highcharts图表控件功能强大,对细节处理得很细致,是目前使用最为广泛的图表控件.本文总结了作者在使用Highcharts时遇到的问题及解决方案. 1. 图表颜色设置 图表的边框色,背景色及点.线的颜色都是可以设置的,其中边框色(borderColor).背景色(backgroundColor)在chart中设置: chart: { backgroundColor: 'pink',// 背景色 borderColor: 'red',// 边框

bootstrap使用时 细节心得

最近国庆7天 还原某丽说 APP PC端网页(作业)时  全程使用bootstrap制作 也遇到了以前很少碰到过的问题 bootstrap 本身修改了某些默认样式  即使在 未给标签class命名某个bootstrap模板时  某些标签也被修改过  这样会容易使某些像我一样的新手误以为自己写的代码哪里出了问题  而浪费很多时间去找一个 没有错误的错误  所以在这里给各位同学做个温馨提示 例如 fieldset 中 lengd标签中的文字 应该是水平居中 位于两侧横线中间 并且垂直居中于横线 但在

c语言:宏里面参数不加括号容易出错,在使用时尽量加括号及举例

宏里面参数不加括号容易出错,在使用时尽量加括号 程序1: #include<stdio.h> #define SQARE(X) X*X int main() { int  n = 10; int m=SQARE(n); printf("m=%d\n",m); return 0; } 结果: m=100 请按任意键继续. . . 分析:貌似没有出问题,请看下面两个例子 程序2: #include<stdio.h> #define SQARE(X) X*X int 

RHEL6.5上Oracle ACFS与Linux samba一起使用时遇到的bug

RHEL上的Oracle ACFS与linux samba一起使用时遇到的bug 一.环境介绍: cat /etc/issue的结果为: Red Hat Enterprise Linux Server release 6.5 (Santiago) Kernel \r on an \m GI的详细patch信息:仅仅安装了GI的11.2.0.4版本,没有打任何的GI psu,没有打任何的GI patch 二.问题说明: 这是一套rhel6.5的rac,使用的是Oracle GI集群软件,使用了ac

解决导航、Tabbar、tableview配合使用时,tableview错位的问题

导航.Tabbar.tableview配合使用时,tableview会出现错位的情况,特别是除tabbar的第一个选项的tableview, 解决方法非常简单,如下: self.tabBarController = [[UITabBarController alloc] init]; self.tabBarController.edgesForExtendedLayout = UIRectEdgeNone;//防止tableview错位 _tabBarControllerNav = [[UINa

在使用时的区别是当我们想访问一个对象(object)的元素dollars 和yens

以上两种定义的唯一区别在于左边的定义中我们给了union一个名字price,而在右边的定义中我们没给.在使用时的区别是当我们想访问一个对象(object)的元素dollars 和yens 时,在前一种定义的情况下,需要使用: book.price.dollars book.price.yens 而在后面一种定义下,我们直接使用: book.dollars book.yens 再一次提醒,因为这是一个联合(union),域dollars 和yens 占据的是同一块内存空间,所以它们不能被用来存储两

关于pthread_join函数在使用时如何不阻塞主线程的一种探索

pthread_join 函数是会阻塞主线程的,这会让很多java程序员不适应.因为在java中 start以后一个线程就执行执行了.主线程不会被阻塞. 而在linux中 join是会阻塞的. 那么如何使用join的时候 不阻塞主线程呢.我给出了一个解决方法. #include <stdio.h> #include <pthread.h> void *print_count(int c); void thread_start(); int main(int argc, char c

ExtJs4.2+Mysql+Struts2+Hibernate3实现分页查询

ExtJs4.2+Mysql+Struts2+Hibernate3实现分页查询 1.demo简介 这是一个由ExtJs4.2,Mysql5.5 ,Struts2,Hibernate3.3构成的简单web项目,本人由于最近在研究ExtJs所以特意做了这个Demo,方便有需要的同学查看,也给自己留下学习笔记吧.需要特别说明我这里并没有整合Struts,Hibernate,这两个工具是独立运行的.转载请注明:http://blog.csdn.net/qiuzhping/article/details/