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窗口有参数的情况没处理。

 

 

posted @ 2013-09-04 18:21  清风送明月  阅读(814)  评论(0编辑  收藏  举报