ExtPB.Net:窗体应用技巧(2)在树形导航下打开弹出的win窗口

  ExtPB.Net的demo程序有个树形导航菜单,里面的菜单打开的窗口放在右边的TabStrip控件中。我们可以设计win通过导航打开,但有时我们希望以弹出窗口的形式打开它,但怎么办呢?
现在可以这样修改一下:
1. 数据结构更改:

也就是增加一个OpenStyle=4的类型,然后将要打开的win窗口的路径写在ObjName里,再将该窗口的js文件路径写在OpenParm里,看上图的最后一行即是。

2. 修改w_index.win.js

else if (openStyle == "4") {

            self.dynamicLoadJs(parm, function () {

                try {

                    //获得除路径外的实际(.win)窗口名称

                    var temp = url.split('.');

                    var objwinName = temp[temp.length - 1];

                    //动态创建(.win)窗口对象

                    var iw_subwin = eval("new " + objwinName);

                    requestor.Open("/LoadWindow.ashx?name=" + url, iw_subwin);

                }

                catch (err) { requestor.MessageBox("提示", "打开窗口失败:" + err.message); }

            });

} 

 

新定义了一个函数: dynamicLoadJs

 

 1 this.dynamicLoadJs = function (jsurl, callback) {

 2         if (jsLoadedFlag == jsurl) { //检查是否已经加载过

 3             if (callback) {

 4                 callback();

 5                 return;

 6             }

 7         }

 8         var Odoc = document.getElementsByTagName('HEAD')[0];

 9         var oScript = document.createElement('script');

10         oScript.setAttribute('type', 'text/javascript');

11         oScript.setAttribute('src', jsurl);

12         //oScript.setAttribute('id', key);

13         Odoc.appendChild(oScript);

14         oScript.onload = oScript.onreadystatechange = function () {

15             if (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete') {

16                 jsLoadedFlag = jsurl; //设置加载标记

17                 oScript.onload = oScript.onreadystatechange = null;

18
if (callback) { 19 callback(); 20 } 21 } 22 } 23 }

 

另一点就是,加载的js如果设置一个唯一key值,也应该可以保证避免重复吧。那怎么设置呢?(是否可以将 jsurl 进行编码当做唯一key值)

限制:win窗口有参数的情况没处理。

 

 

你可能感兴趣的:(.net)