`
qing_gee
  • 浏览: 118159 次
  • 性别: 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 下拉框左右选择

    dwz 下拉框左右选择 dwz 下拉框左右选择 dwz 下拉框左右选择

    jqgird dwz 框架扩展

    jqgird dwz 框架 扩展 类似jqgid table json获取初始化数据

    DWZ状态扩展

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

    DWZ文件+文档

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

    dwz开源web界面框架

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

    DWZ富客户端框架使用手册

    资源名称:DWZ富客户端框架使用手册资源目录:概述. 4 学习DWZ 的建议...... 4 DWZ 区别于其它 JS 框架,最大的优点 4 设计思路 .... 4 版权声明 .... 5 DWZ 研发组介绍 ....... 5 HTML 扩展...... 6 Ajax 链接扩展...

    DWZ使用手册及视频下载

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

    dwz功能示例

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

    dwz4j-demo

    dwz4j不仅仅是一个开发框架,还包括了一套完整的UI规范(包括前台UI规范和后台管理DWZ UI框架)、程序框架、开发流程、测试流程、版本控制、数据备份方案 dwz4j帮助开发人员搞定所有低级的基础代码——所有那些需要...

    thinkphp3_dwz

    dwz thinkphp3.0 角色管理

    dwz框架 asp.net mvc3

    dwz框架 asp.net mvc3;dwz框架 asp.net mvc3;dwz框架 asp.net mvc3

    DWZ视频+文档

    DWZ视频+文档

    适合做网站后台的DWZ富客户端框架(jQuery RIA framework)

    DWZ富客户端框架设计目标是简单实用、扩展方便、快速开发、RIA思路、轻量级 DWZ支持用html扩展的方式来代替javascript代码, 基本可以保证程序员不董javascript, 也能使用各种页面组件和ajax技术. 如果有特定需求也...

    DWZ客户端后台框架下载

    DWZ富客户端框架设计目标是简单实用、扩展方便、快速开发、RIA思路、轻量级 DWZ支持用html扩展的方式来代替javascript代码, 基本可以保证程序员不董javascript, 也能使用各种页面组件和ajax技术. 如果有特定需求也...

    dwz4j-springmvc

    DWZ

    简单实用国产jQuery UI框架 - DWZ富客户端框架DWZ RIA 1.4.4 (20121016 修正了横向导航js报错问题)

    DWZ RIA 1.4.4 (20121016 修正了横向导航js报错问题) 修复使用xheditor插件IE下兼容问题:IE下打开一个含有编辑器的页面,然后关闭,再打开不能录入问题 修复多文件上传插件uploadify 的html扩展方式,java读取不...

    DWZ+ThinkPHP+kindeditor整合,及DWZ官方整合部分小BUG修复

    首先非常感谢DWZ官方整合了DWZ+ThinkPHP,方便我们PHPer的开发,DWZ的后台框架非常好用。 其次,本人在 DWZ官方 整合的基础上做了些修改,而且经测试完全可用,现在本人在此基础上开发项目。 修改的内容如下: 1、...

    dwz时间控件

    dwz时间控件

    DWZ资源合集

    DWZ合集 dwz-user-guide dwz_jui-master

Global site tag (gtag.js) - Google Analytics