zoukankan      html  css  js  c++  java
  • 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只加载一次,所以后打开的页面获取的参数不正确。

    希望高人指点解决方案。

  • 相关阅读:
    android 自定义动画4 RotateAnimation源码分析
    Android 绘图 阴影制作(Shadow)
    view, surfaceView, invalidate, postInvalidate, 刷新屏幕
    android database 常用字段描述
    Android标题栏进度指示器使用
    ThumbnailUtils Android2.2新增类
    Android 重力感应 测试代码
    Android中内嵌字体实现个性化
    Android中悬浮窗口
    Android布局Java代码构造法
  • 原文地址:https://www.cnblogs.com/ushou/p/3387299.html
Copyright © 2011-2022 走看看