ExtJs双ActionResult共用同一Js文件ID冲突解决方案
项目使用MVC+ExtJs实现,权限控制是基于Controller下的ActionResult的,有一个页面因参数不同就需要新建两个ActionResult。
不要问我为何是基于页面级,而不是数据级,我只想说这是历史遗留问题。
现在直面我们的问题,两个ActionResult也就是两个页面,共用同一个Js文件,而这个文件又是ExtJs的,众所周知,ExtJs获取Dom是通过Ext.getCmp('‘)来获取,那么,原来唯一的页面Id现在就变的不唯一了,会出现事件调用混乱。
昨天曾想了几年解决办法。
方法1:获取页面路径+Id后缀,生成唯一ID.
实践,此路不通。
代码如下:var url = window.location.href;
获取结果,获取的是ExtJs的框架页路径,而不是当前面路径。
方法2:页面加载时,自动生成类Guid的Id+Id后缀,生成唯一ID。
未作实践,理论上是可行的。
方法3:使用Js后缀传参,如:LogisticsMgr/MatRequireView.aspx.js?MatType=111
我们就获取这个111,然后再+各控件Id后缀,生成唯一ID.
方法实现:
Ext.namespace("JsHelper");
//获得js文件后面的参数 如test.js?user=wuf created by wufei 2013-10-25
JsHelper.GetJsParamValue = function(param) {
var rName = new RegExp("(\\?(.*))?$")
var jss = document.getElementsByTagName('script');
for (var i = 0; i < jss.length; i++) {
var j = jss[i];
if (j.src && j.src.match(rName)) {
var oo = j.src.match(rName)[2];
if (oo && (t = oo.match(/([^&=]+)=([^=&]+)/g))) {
for (var l = 0; l < t.length; l++) {
r = t[l];
var tt = r.match(/([^&=]+)=([^=&]+)/);
if (tt && tt[1] == param) return tt[2];
}
}
}
}
return '';
}
方法调用:var idPre = JsHelper.GetJsParamValue("MatType");
至此问题解决,声明ID和获取ID是都加上这个变量就可以了。
备注:此方案无效,因为Js只加载一次,所以后打开的页面获取的参数不正确。
希望高人指点解决方案。
ExtJs双ActionResult共用同一Js文件ID冲突解决方案的更多相关文章
- js文件命名冲突理解
在一个index.html文件里先后导入a.js和b.js文件a.js文件里写上var s = 2;console.log(s);b.js文件里写上var s = 5;这时a.js和b.js用了相同的 ...
- webpack.config.js文件的高级配置
一.多个入口文件之前我们配置的都是 一个入口 var webpack = require('webpack'); var commonsPlugin = new webpack.optimize.Co ...
- 学习笔记:调用js文件冲突问题解决方案
之前自己动手做了一个小网站,在实现过程中遇到了一个关于js文件调用冲突的问题. 具体问题描述如下:在index.html文件中引用了两个js文件,单独添加banner.js或者focus_pic.js ...
- Extjs学习----------动态载入js文件(减轻浏览器的压力)
动态载入js文件能够减轻浏览器的压力,本例使用了Ext.window.Window组件,该组件的学习地址:http://blog.csdn.net/z1137730824/article/detail ...
- ExtJs 6.0+快速入门,ext-bootstrap.js文件的分析,各版本API下载
ExtJS6.0+快速入门+API下载地址 ExtAPI 下载地址如下,包含各个版本 http://docs.sencha.com/misc/guides/offline_docs.html 1.使用 ...
- ExtJs 6.0+快速入门,ext-bootstrap.js文件的分析,各版本API下载(一)
ExtAPI 下载地址如下,包含各个版本 http://docs.sencha.com/misc/guides/offline_docs.html 1.使用工具HBuilder 2.java 版本 8 ...
- Django_博客项目 引入外部js文件内含模板语法无法正确获取值得说明和处理
问题描述 : 项目中若存在对一段js代码复用多次的时候, 通常将此段代码移动到一个单独的静态文件中在被使用的地方利用 script 标签的 src 属性进行外部调用 但是如果此文件中存在使用 HTML ...
- 前端设计中关于外部js文件加载的速度优化
在一般情况下,许多人都是将<script>写在了<head>标签中,而许多浏览器都是使用单一的线程来加载js文件的,从上往下,从左往右. 若是加载过程出错,那么网页就会阻塞,就 ...
- Extjs 使用fileupload插件上传文件 带进度条显示
一.首先我们看看官方给出的插件的解释: 一个文件上传表单项具有自定义的样式,并且可以控制按钮的文本和 像文本表单的空文本类似的其他特性. 它使用一个隐藏的文件输入元素,并在用户选择文件后 在form提 ...
随机推荐
- C++数据类型总结
关键字:C++, 数据类型, VS2015. OS:Windows 10. ANSI C/C++基本数据类型: Type Size 数值范围 无值型void 0 byte 无值域 布尔型bool 1 ...
- mac上xampp配置
sudo su /Applications/XAMPP/xamppfiles/xampp security
- 十、mysql事务的简介
1. myisam跟memory支持表级别锁定 BDB 页级锁定 Innodb 行级锁定 2.表锁(不是表嫂哈) lock table read //只读表锁,也就是说执行了这个锁后,锁内的操作只能为 ...
- GNU_makefile_template
#g++ compiler: options # -std=c++0x enables ISO C++ 11 standard # -I.. pulls in the Version_test.h f ...
- iOS 通览(一) - 技巧、特性及规范
一.编译器特性 1.ARC. ARC是编译器特性.项目中使用了ARC,编译器会在项目编译的时候自动添加OC对象计数器release代码.并且使用了ARC,项目中将不允许出现release.retain ...
- Java中的break与continue区别
break跳出当前循环执行循环下面的程序, 如果break出现在嵌套循环的内层循环, 则break语句只会跳出当前层的循环; 当程序执行到continue时时, 则跳过本次循环程序重新回到循环开始继续 ...
- 一个有意思的js实例,你会吗??[原创]
首先,看看下面一个js例子,你觉得会输出什么呢? function fn(a){ a(); function a(){ console.log(2); } var a = function(){ co ...
- linux驱动系列之ubuntu快捷键(转)
Ubuntu快捷键-终端快捷键 1.关于终端的快捷键: Tab:tab键是比较常用的一个快捷键,它的作用是补全文件名或者路径.举例 来说,输入”cd /ho”在按一下tab键,终端里就会显示 ...
- js实现网页图片延时加载的原理和代码 提高网站打开速度
有时我们看到一些大型网站,页面如果有很多图片的时候,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页面加载的速度,对 ...
- Python:使用threading模块实现多线程编程
转:http://blog.csdn.net/bravezhe/article/details/8585437 Python:使用threading模块实现多线程编程一[综述] Python这门解释性 ...