`
qing_gee
  • 浏览: 120844 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

为dwz扩展树形下拉框

阅读更多

前言:在之前的博客中写了一个不在dwz环境下制作的树形下拉框,但是使用dwz后,发现需要为dwz扩展一个自己的组件,通过value属性为服务端传递请求参数,通过title属性显示树形下拉框当前选中项目,效果图见如下:


 

改造步骤见如下:

第一步:准备材料,可在附件中下载combotree.7z ,目录如下


 

第二步:在dwz的index.jsp页面中准备菜单

<!-- 下拉框的树形菜单 -->
	<div id="menuContent" style="display: none; position: absolute;">
		<ul id="combotree" class="ztree"></ul>
	</div>

第三步:在combotree.js中封装组件内容

/**
 * @author maweiqing
 * @version 1.0
 */
(function($) {
	$.extend(
					$.fn,
					{
						combotree : function(options) {
							var $this = $(this);
							loadProxysInfo();
							
							if ($this.val() != null && $this.val() != '') {
								$this.before("<span class='combo-text' style='float:left;display:block;width:"
										+ $this.width() + "px' onclick=\"showMenu($(this));\" >" + $this.attr("title") + "</span>");
							} else {
								$this.before("<span class='combo-text' style='float:left;display:block;width:"
										+ $this.width() + "px' onclick=\"showMenu($(this));\" >" + rootNode["name"] + "</span>");
							}
							
							$this.before("<span onclick=\"showMenu($(this).prev());\" class=\"combo-arrow\" style=\"float:left\"></span>");
							$this.hide();
						}
					});
})(jQuery);

var setting = {
	view : {
		dblClickExpand : false
	},
	data : {
		simpleData : {
			enable : true
		}
	},
	callback : {
		onClick : onClick
	},
	view : {
		selectedMulti : false,
		// showLine : false,
		showIcon : false
	}
};

/**
 * 隐藏菜单
 */
function hideMenu() {
	$("#menuContent").fadeOut("fast");
	$("body").unbind("mousedown", onBodyDown);
}

/**
 * 点击菜单,对当前输入框的前span进行name的赋值,对当前输入框进行代理序列号的赋值
 * 
 * @param e
 * @param treeId
 * @param treeNode
 */
function onClick(e, treeId, treeNode) {
	$("#proxyserial").prev().prev().html(treeNode.name);
	$("#proxyserial").attr({
		value : treeNode.id,
		title : treeNode.name
	});
	hideMenu();
}

/**
 * 为当前节点添加下级节点
 * 
 * @param records
 * @param cnode
 */
function addNextNode(records, cnode) {
	cnode["children"] = new Array();
	cnode["open"] = true;
	$(records).each(
			function(index, value) {
				// 如果当前代理的级别=len,且以pre开头的,则添加到上一级
				if ((value.proxyserial.length / 4 == cnode.id.length / 4 + 1)
						&& (value.proxyserial.substring(0, cnode.id.length) == cnode.id)) {
					var subNode = {};
					subNode["name"] = value.proxysName;
					subNode["id"] = value.proxyserial;
					cnode["children"].push(subNode);
					addNextNode(records, subNode);
				}
			});
}

// 树形下拉框的节点数组
var proxyTreeData = [];

// 根节点
var rootNode = {};

/**
 * 取得代理列表.
 */
function loadProxysInfo() {
	// 当前树形结构没有获取代理节点时
	if (proxyTreeData.length == 0) {
		$.ajax({
			url : common.ctx + "/member/loadProxysInfo.do",// 请求的URL
			async : false,
			dataType : 'json',
			success : function(records) {
				// 代理表中有代理
				if (records != null && records.length > 0) {
					// 取出root节点
					var nodes = records.slice(1);
					var root = records[0];

					// 从根节点开始
					rootNode["name"] = root.proxysName;
					rootNode["id"] = root.proxyserial;
					rootNode["open"] = true;
					rootNode["children"] = new Array();
					
					// 根节点有子节点
					if (nodes != null && nodes.length > 0) {
						// 设定当前代理的下级代理级别,假如当前代理为2级,那么2级的下级为3级
						var start = 1;
						if (root.proxyserial != null) {
							start = root.proxyserial.length / 4 + 1;
						}
						
						// 遍历子节点
						$.each(nodes, function(index, value) {
							if (value.proxyserial.length / 4 == start) {
								var subNode = {};
								subNode["name"] = value.proxysName;
								subNode["id"] = value.proxyserial;
								rootNode["children"].push(subNode);
								addNextNode(records, subNode);
							}
						});
					}
					proxyTreeData.push(rootNode);
					// 对tree进行赋值
					$.fn.zTree.init($("#combotree"), setting, proxyTreeData);
				}
			}
		});
	}
}

/**
 * 打开树形结构
 */
function showMenu($ctrl) {
	var cityOffset1 = $ctrl.offset();
	$("#menuContent").css({
		width : $ctrl.width() + $ctrl.next().width(),
		left : cityOffset1.left + "px",
		top : cityOffset1.top + $ctrl.outerHeight() + "px"
	}).slideDown("fast");
	$("body").bind("mousedown", onBodyDown);
}

/**
 * 点击树形结构以外时,关闭树形下拉框
 * 
 * @param event
 */
function onBodyDown(event) {
	if (!(event.target.id == "menuBtn" || event.target.id == "menuContent" || $(event.target).parents("#menuContent").length > 0)) {
		hideMenu();
	}
}

 代码中对关键点进行说明,该组件内容主要是为了定制代理的多层级关系,如有需要,你需要变更的就是loadProxysInfo()方法

 

第四步:为dwz增加该组件的初始化,在dwz.ui.js文件中

	$("ul.tree", $p).jTree();
	$("input.combotree", $p).combotree();
	$('div.accordion', $p).each(function(){
		var $this = $(this);
		$this.accordion({fillSpace:$this.attr("fillSpace"),alwaysOpen:true,active:0});
	});

 

第五步:就可以在页面上进行使用了

<span class="combo">
						<input type="text" id="proxyserial" name="proxyserial" class="combotree" value="${vo.mo.proxyserial}" title="${proxyName}">
					</span>

 

总结:通过以上方式,就可以使用dwz的检索功能,通过服务端

initMembersList(BaseConditionVO vo, Model model, HttpServletRequest request) 

// 获取对应代理名称
			if (proxyserial != null) {
				model.addAttribute("proxyName", this.proxysMapper.selectByProxyserial(proxyserial).getUsername());
			}
			condition.setProxyserial(proxyserial);

 进行检索功能了

 

  • 大小: 2.9 KB
  • 大小: 11.6 KB
2
1
分享到:
评论
1 楼 jacking124 2014-11-03  
mark!

相关推荐

    dwz 下拉框左右选择

    在IT行业中,"dwz 下拉框左右选择"通常指的是一个特定的UI组件,它用于在Web应用中实现用户交互。DWZ(Dynamic Web Zone)是一个开源的JavaScript框架,专门用于构建富客户端的Web应用程序。这个框架提供了丰富的UI...

    jqgird dwz 框架扩展

    总结,jqGrid与DWZ框架的整合能为Web应用带来高效的数据管理和用户友好的界面。通过理解两者的基本用法和扩展机制,开发者可以更好地利用这两个工具来提升开发效率和用户体验。在实际开发中,还需要根据具体需求灵活...

    DWZ状态扩展

    DWZ框架本身状态不多,有时候需要的状态框架没有,需要自己去扩展。

    DWZ中文开发手册

    DWZ框架囊括了一系列丰富的组件,涵盖导航、表格、对话框、树形结构等,旨在满足多样化的Web应用需求: - **NavTab**:用于实现多标签页浏览,便于用户在不同页面间快速切换。 - **Accordion**:可折叠面板组件,...

    DWZ文件+文档

    DWZ富客户端框架设计目标是简单实用、扩展方便、快速开发、RIA思路、轻量级 DWZ框架支持用html扩展的方式来代替javascript代码, 只要懂html语法, 再参考DWZ使用手册就可以做ajax开发. 开发人员不写javascript的...

    DWZ帮助文档 PDF版

    DWZ富客户端框架是一种基于JavaScript的前端开发框架,它提供了一套丰富的UI组件和扩展功能,旨在简化Web应用程序的开发流程。DWZ框架具备良好的兼容性、模块化和扩展性,能够帮助开发者快速构建具有丰富交互功能的...

    springmvc+mybatis+dwz整合

    DWZ包括表格、下拉框、按钮、对话框等常用UI元素,使得Web应用具有良好的用户体验。在本项目中,DWZ版本为1.5.3,可以与SpringMVC和MyBatis后端完美融合,实现前后端的交互。 整合这三个框架的过程通常包括以下几个...

    dwz - 简单实用国产jQuery UI框架 - DWZ富客户端框架(jUI)

    1. **组件丰富**:DWZ包含了多种常见的Web组件,如表格、表单、对话框、菜单、按钮、树形结构、日历等,这些组件设计简洁,易于使用,并且与jQuery的API紧密结合,可以灵活定制和扩展。 2. **页面布局**:框架提供...

    dwz开源web界面框架

    学习DWZ的建议 •通读DWZ文档,很多新手提的问题文档中都写了 •看demo每个组件演示效果和代码(留意组件html结构) •建议安装firebug,用firebug看html结构、CSS和调试JS都非常方便。见附录一 firebug介绍 •对于...

    DWZ——国内一款开源框架(JUI)

    - `dwz.tree.js`:树形结构组件。 - `dwz.datepicker.js`:日期选择器组件。 - `dwz.validate.method.js`:表单验证相关的方法。 ### 常见问题与解决策略 DWZ文档中还详细记录了一些常见的问题及其解决办法,例如...

    DWZ开源框架免费

    2. **丰富的UI组件**:框架内包含了多种常见的前端控件,如表格、表单、弹出窗口、下拉菜单、树形结构等,这些组件经过优化,易于使用且功能强大。 3. **Ajax无刷新交互**:DWZ强调页面的无刷新更新,通过Ajax技术...

    DWZ框架及使用教程

    随着对DWZ的深入理解,你还可以探索其高级特性,如AJAX上传、拖放操作、树形结构等,进一步提升你的Web开发技能。 总的来说,DWZ框架为Web开发者提供了一个高效、易用的工具集,能够快速构建功能丰富的交互式Web...

    dwz-demo-1.1.6RC1.zip_DEMO_dwz php_dwz-demo_dwz-ria_php dwz

    这个压缩包包含了一个名为“dwz-demo”的项目,是用于展示和学习dwz框架功能的实例。 【描述】提到,这个框架是一个JavaScript框架系统,特别适合用于开发后台管理系统。描述中强调了其易学性,鼓励用户尝试单击...

    dwz富客户端框架

    在实际项目中,开发者可以根据需求选择合适的部分引用到项目中,同时结合DWZ的API文档和示例进行定制和扩展。 总的来说,DWZ富客户端框架虽然在现代前端框架中显得有些老旧,但它在旧项目的维护和更新中仍具有一定...

    thinkphp3_dwz

    通过结合ThinkPHP的后端能力和DWZ的前端优势,这个“thinkphp3_dwz”项目为实现高效的角色管理和权限控制提供了全面的解决方案。开发者可以通过学习和理解该项目,进一步掌握RBAC原理,提升在PHP框架下进行Web开发的...

Global site tag (gtag.js) - Google Analytics