最近看到项目中的一些代码,总结一些与大家分享。
B/S 架构的软件系统开发过程中总会遇到一些公用的页面:比如下面的例子。
根据功能的分析,【学生查找面板】就是一个公用的页面。
很多朋友在使用的时候喜欢用window.open 或者showModalDialog打开这个页面起到,但是我看到很多朋友在使用这个页面的时候写了很多的硬编码在当中
这里的硬编码意思就是在【学生查找面板】的编码中加入了调用页面的元素,比如我们会看到下面的代码
window.opener.document.getElementById('TxtStudentName').value =... window.dialogArguments.document.getElementById('TxtStudentName').value=...这里的TxtStudentName就是出勤页面中编辑框的ID,其实这样的代码充斥了网络很多BBS中关于弹出页面回传参数的答案。这样当然能够解决问题,也并不是不好或者不能用,但是我觉得不爽,还没有达到我们要的效果。
客观的讲,在做【学生查找面板】的时候我们可能不知道有【出勤系统页面】,而且在将来的时候可能还会有其他各种各样的见面它们都要调用这个【学生查找面 板】,那么这个TxtStudentName其实从某种意义上就限定了【出勤系统页面】、限定了【选课系统页面】里控件的命名规则,这样后来的开发人员就 必须了解这些东东,否则很容易出错。另外还有一个场景就是【学生查找面板】返回的参数是多个的情况,当有变化的时候对使用这种方式来说就必须两边同步进行 更改 ~。
再次提到开闭法则——我们要想尽一切办法不去修改已经做好的东东。
这里提出我的一些建议:
1. 在做【学生查找面板】的时候使用返回值方式,而不是找到调用页面并直接操作调用页面,也就是不要用
opener的这种方式
window.returnValue=x;
2. 调用页面获得参数后在内部做处理, 也就是说【出勤系统页面】、【选课系统页面】 或者以后新开发的页面只关心获得的数据、并在获得数据后进行操作。
var p=window.showModalDialog("B.html",window,"dialogWidth=400px;dialogHeight=200px");
3. 在页面返回的的参数最好用对象,看到很多朋友返回的时候都是字符串、然后再解析字符串。(这样真的好麻烦~,我想很多朋友这样做可能是不知道可以用返回对象的方式)
People是类的定义,在学生页面中对People的实例赋值并且作为参数返回, 在其他页面里作为接受到的参数就可以直接使用了。
这里有个Sample, 需要的朋友可以download一下 .
That's all .