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只加载一次,所以后打开的页面获取的参数不正确。

希望高人指点解决方案。

 

你可能感兴趣的:(action)