dwz 利用dialog实现可刷新的增加、修改 功能 扩展
2013-09-07 23:16 阅读(169)

在dwz中想要实现增加功能,如增加个用户,是通过弹出个新的tab页, 且添加成功后并不能直接返回主列表,并刷新。这样,在很多情况是不符合操作习惯的,而且也是比较麻烦的。这样我们就需要进行下小小的扩展,利用dialog弹出增加或修改页,保存后能关闭增加页且主页面自动刷新出新增加的记录。如下图所示:

一个简单的客户信息管理页,红色标记为该功能涉及的链接。

扩展代码common/extend/dialog.js

$(document).ready(function(){
// dialogs
$("a[target=dialog]").each(	function(){
		$(this).click(function(event) {
			var $this = $(this);
			var title = $this.attr("title") || $this.text();
			var rel = $this.attr("rel") || "_blank";
			var options = {};
			var w = $this.attr("width");
			var h = $this.attr("height");
			if (w)
				options.width = w;
			if (h)
			    options.height = h;
			options.max = eval($this.attr("max") || "false");
			options.mask = eval($this.attr("mask") || "false");
			options.maxable = eval($this.attr("maxable") || "true");
			options.minable = eval($this.attr("minable") || "true");
			options.fresh = eval($this.attr("fresh") || "true");
			options.resizable = eval($this.attr("resizable") || "true");
			options.drawable = eval($this.attr("drawable")|| "true");
			//options.close = eval($this.attr("close") || "");
			options.close = freshPage;
			options.param = $this.attr("param") || "";
			var url = $this.attr("href");
			var $p$ = window.parent.$;
			$p$.pdialog.open(url, rel, title, options);
			return false;
	   });
});					
// 关闭dialog,同时刷新页面
$(".submitForm").each( function() {
	   $(this).click( function(event) {
			var $this = $(this);
			// 从按钮属性上获取对话框ID
			var dialogId = $this.attr("rel");
			//取得处理函数
			var onHand = eval($this.attr("onHand") || "");
			var ret = false;
			if(onHand && $.isFunction(onHand)) {
				ret = onHand();
			}
			if(!ret)
				return ;
			// 获取父窗体的jquery方法。
			var $p$ = window.parent.$;
			var dialog = $p$("body").data(dialogId);
			var fresh = eval($this.attr("fresh") || "false");
			if(fresh)//刷新父页面
			   dialog.data("param", {"retureType":"fresh"});
			// 关闭对话框
			$p$.pdialog.close(dialogId);
			return false;
		});
});	
//关闭dialog
$(".close").each( function() {
	   $(this).click( function(event) {
			var $this = $(this);
			// 从按钮属性上获取对话框ID
			var dialogId = $this.attr("rel");
			// 获取父窗体的jquery方法。
			var $p$ = window.parent.$;
			// 关闭对话框
			$p$.pdialog.close(dialogId);
			return false;
		});
});
})
//刷新页面
function freshPage(param) {
	if(param && param.retureType == "fresh")
       window.location.reload();
	return true;
}



只需要将上面的代码同时引入到主页面(客户列表页list.jsp)和添加(add.jsp)页面,同时在操作按钮上加相应的属性即可。下面介绍如何使用:


主页面"添加"设置

如下:

<a class="add" href="../content/add.html" target="dialog" mask="true" rel="customer _add"  ><span>添加</span></a>

添加页面设置如下:

<li>
  <button type="button"  class="submitForm" fresh="true" onHand="add"  rel="zuo_add">保存</button>
</li>
<li>
   <button type="button" class="close"  rel="zuo_add">取消</button>
</li>
对于“取消”按钮通过"close"标记,简单完成关闭添加页功能。"保存"(以及修改、删除按钮等,)按钮通过"submitForm" 标记,onHand属性标记完成添加功能的处理方法,方法名称可任意定义,如add、edit等,该方法必须返回个布尔值,为true时,将关闭添加页,为false时不关闭。fresh属性标记在onHand方法处理完后是否刷新主页面,true:刷新,false:不刷新。


下面代码是大家实际使用时需要扩展的:

//修改
function edit(){
	//业务处理逻辑
	//......
	//
	return true;
}
//删除
function del(){
	//业务处理逻辑
	//......
	//
	return true;
}
//添加
function add(){
	//业务处理逻辑
	//......
	//
	return true;
}
方法名称可任意,但必须和onHand属性中的一致。

个人觉得此功能虽然简单,但很实用,所以分享下。