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的模式。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。