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

继续对dwz封装树形下拉框

阅读更多

前言:之前写了一篇dwz的树形下拉框组件,只能满足单页面的使用,但是面对实际应用时,以上应用暂时不能满足,于是乎又重新对树形菜单进行改造。

 

然后先说一下思路,本思路有很大弊端,也希望有看到的大牛有好的办法时,请多多指教。

思路:页面上通过一个input标签进行value值和title值的动态设定

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

 value向controller传递值,以便通过以下值进行获取

String proxyserial = request.getParameter("proxyserial");
			condition.setProxyserial(proxyserial);

 title值为方便页面显示,eg.title为交易所总代理,value为""字符串,通过controller的以下方法对前台显示内容进行控制

model.addAttribute("proxyName", this.proxysMapper.selectByProxyserial(currentProxyserial).getUsername());

 然后,需要在combotree.js中对该input标签进行定制,见如下代码

/**
 * @author maweiqing
 * @version 1.0
 */
(function($) {

	$.extend($.fn, {
		combotree : function() {
			// 获取树形菜单内容
			loadProxysInfo(false, null);
			
			return this.each(function(i) {
				// 输入文本框
				var $this = $(this);

				// 文本框的ID值
				var cid = $this.attr("id") || Math.round(Math.random() * 10000000);
				
				// 定制的title值
				var name = $this.attr("title");
				// 定制下拉框
				var combo = '<span class="combo-text" id="comboText_' + cid
						+ '" style="float:left;display:block;width:' + $this.width() + 'px">' + name + '</span>'
						+ '<span onclick="showMenu($(this).prev());" class="combo-arrow" style="float:left" title="显示"></span>'
						+ '<span onclick="loadProxysInfo(true, ' + cid
						+ ');" class="combo-reload" style="float:left" title="重新加载"></span>';

				$this.before(combo);
				$this.hide();
			});
		}
	});
})(jQuery);

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

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

/**
 * 为当前节点添加下级节点
 * 
 * @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);
				}
			});
}

/**
 * 打开树形结构
 */
function showMenu($ctrl) {
	var cid = $ctrl.attr("id").substring($ctrl.attr("id").indexOf("_") + 1);

	var $tree = $('<ul class="ztree" id="menuTree_' + cid + '"></ul>');
	
	// 对tree进行赋值
	$.fn.zTree.init($tree, setting, proxyTreeData);
	
	// 定制树形菜单
	var $menuContent = $('<div id="menuContent_' + cid
			+ '" style="position: absolute;display: none;"></div>');
	$menuContent.append($tree);

	// 添加到body中
	$("body").append($menuContent);
	
	// 获取当前文本框的值,对树形菜单进行选中状态的赋值
	var treeObj = $.fn.zTree.getZTreeObj($tree.attr("id"));
	treeObj.selectNode(treeObj.getNodeByParam("id", $("#" + cid).val(), null));
	
	var offset1 = $ctrl.offset();
	// 计算树形菜单位置
	$menuContent.css({
		width : $ctrl.width() + $ctrl.next().width() * 2,
		left : offset1.left + "px",
		top : offset1.top + $ctrl.outerHeight() + "px"
	}).slideDown("fast");
	
	// 绑定鼠标左键点击事件
	$("body").bind("mousedown", {
		cid : $menuContent.attr("id")
	}, onBodyDown);
}

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

/**
 * 取得代理列表.
 */
function loadProxysInfo(flag, cid) {
	// 手动加载
	if (flag) {
		// 重新获取数据
		proxyTreeData = [];
		ajaxProxys();
		// 显示内容
		$("#comboText_" + $(cid).attr("id")).html(proxyTreeData[0].name);

		// 输入框赋值
		$(cid).attr({
			value : proxyTreeData[0].id,
			title : proxyTreeData[0].name
		});

		// 树形菜单重新赋值
		var $menuTree = $("#menuTree_" + $(cid).attr("id"));
		// 对tree进行赋值
		$.fn.zTree.init($menuTree, setting, proxyTreeData);
	} else {
		// 如果数据没有初始化,那么需要重新获取代理树形结构
		if (proxyTreeData.length == 0) {
			ajaxProxys();
		}
	}
};

/**
 * 请求后台,获取当前登录用户的树形结构菜单内容
 */
function ajaxProxys() {
	$.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];

				// 根节点
				var rootNode = {};
				// 从根节点开始
				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);
			}
		}
	});
};

// 设置ztree属性
var setting = {
	view : {
		dblClickExpand : false
	},
	data : {
		simpleData : {
			enable : true
		}
	},
	callback : {
		onClick : nodeClick
	},
	view : {
		selectedMulti : false,
		// showLine : false,
		showIcon : false
	}
};

/**
 * 点击菜单,对当前输入框的前span进行name的赋值,对当前输入框进行代理序列号的赋值
 * 
 * @param e
 * @param treeId
 * @param treeNode
 */
function nodeClick(e, treeId, treeNode) {
	// 传递唯一标识
	var serial = treeId.substring(treeId.indexOf("_") + 1);
	// 通过treeId找到对应的文本框和显示名称
	$("#comboText_" + serial).html(treeNode.name);

	$("#" + serial).attr({
		value : treeNode.id,
		title : treeNode.name
	});

	// 隐藏当前树形菜单
	hideMenu($('#menuContent_' + serial));
};

 以上,主要有几点进行控制,首先为每个input标签定制显示的span,点击的向下箭头,重新加载的span,还有ztree组件,当页面中有需要加载树形下拉框的时候,会进入到combotree : function(),该方法需要获取树形菜单数据,然后指定显示的文本,当打开树形菜单的时候,通过id之间的协定进行获取对应的jquery对象,该处需要进行优化,然后设置树形菜单的当前选中项,并且指定显示位置。

 

通过以上办法,虽然解决了当前所需,但是总觉得不是很好。

  • 大小: 4.2 KB
0
0
分享到:
评论

相关推荐

    为dwz扩展树形下拉框

    标题“为dwz扩展树形下拉框”指的是在DWZ(Dynamic Web Zone)框架中对树形下拉框功能的扩展。DWZ是一个基于jQuery的前端开发框架,主要用于构建富交互式的Web应用。这个扩展可能涉及到在原有的DWZ组件基础上增加或...

    dwz 下拉框左右选择

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

    DWZ中文开发手册

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

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

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

    DWZ框架的一些用法

    DWZ框架对HTML表单进行了封装,支持Ajax提交、自动验证和表单重载等功能。它提供了便捷的表单操作API,使得表单的创建和处理变得更加简单。 3. **Ajax交互**: DWZ的核心是基于jQuery的Ajax实现,它简化了Ajax...

    dwz最完整demo

    2. **UI组件**:框架内集成了丰富的UI组件,如按钮、表格、表单、弹窗、提示、树形菜单、下拉选择器等,这些组件都进行了优化,易于使用且兼容性良好。 3. **AJAX交互**:DWZ支持AJAX无刷新操作,通过封装的API可以...

    dwz富客户端框架

    5. **Ajax操作**:DWZ对Ajax进行了封装,简化了异步请求的处理,使得前后端通信更加便捷。 6. **提示信息**:如加载提示、错误提示等,提高了用户体验。 7. **布局管理**:DWZ提供了流式、响应式等多种布局模式,...

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

    "demo"指的是演示或示例,"dwz_php"和"php_dwz"暗示了该框架与PHP的结合,"dwz-demo"是对压缩包内容的再次确认,而"dwz-ria"可能是指dwz框架在Rich Internet Application(RIA,富互联网应用)场景中的应用。...

    DWZ框架及使用教程

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

    springmvc+mybatis+dwz整合

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

    DWZ框架结构

    DWZ(Dynamic Web ZUI)框架是一款基于Ajax技术的开源JavaScript前端框架,主要应用于Web应用程序的用户界面设计,尤其在富互联网应用(RIA,Rich Internet Applications)开发中表现出色。DWZ框架以其强大的功能、...

    DWZ帮助文档 PDF版

    在使用DWZ框架时,开发者需要了解如何初始化框架,如何通过JavaScript对页面元素进行操作,以及如何与后端进行数据交互。DWZ提供了详细的API文档和示例代码,供开发者快速上手。 关于DWZ框架的js库,它主要包括了多...

    dwz的Demo和chm使用手册

    通过这些Demo,你可以直观地了解如何使用DWZ的导航栏、表单、对话框、分页、树形结构等组件。每个示例都配有详细的注释,解释了实现特定功能的关键代码,这对于初学者来说非常有帮助。同时,你可以直接在浏览器中...

    dwzteam-dwz_jui-master

    2. **组件库**:DWZ UI提供了许多预封装的组件,如表格、表单、对话框、按钮、下拉菜单、树形结构、时间选择器等,这些组件大大简化了前端开发。 3. **AJAX集成**:DWZ UI支持Ajax无刷新交互,可以方便地实现异步...

    dwz中的全国省市的查找带回

    标题 "dwz中的全国省市的查找带回" 涉及的是一个使用DWZ(Dynamic Web Zone)框架实现的中国省市联动下拉选择的功能。DWZ是一个国内常用的前端UI框架,它提供了一系列组件和功能,方便开发者构建交互性强、用户体验...

    DWZ使用帮助文档

    - **dwz.tree.js**: 树形结构功能。 - **dwz.theme.js**: 主题设置功能。 - **dwz.validate.method.js**: 验证方法集合。 - **dwz.validate.zh.js**: 中文验证消息。 - **dwz.contextmenu.js**: 上下文菜单功能。 - ...

    C# DWZ 项目案例

    它提供了丰富的页面组件,如表格、表单、对话框、树形结构、分页、下拉菜单等,极大地简化了前端开发工作,提高了用户体验。DWZ与后端语言如PHP、Java、C#等配合使用,实现数据交互和业务逻辑处理。 在这个“C# DWZ...

    thinkphp3_dwz

    标题“thinkphp3_dwz”指的是一个基于ThinkPHP 3.0框架与DWZ UI集成的项目,主要用于实现角色管理功能。在Web开发中,ThinkPHP是一个流行的PHP框架,而DWZ(Dynamic Web Zone)是一个前端jQuery UI框架,提供了一...

    DWZ开源框架免费

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

    dwz.rar_dwz_dwz struts

    它提供了丰富的UI组件,如表格、树形结构、对话框、表单验证等,使开发者能够更轻松地创建交互式的前端界面。DWZ通常与后端MVC框架结合使用,如Struts或Spring MVC,来处理业务逻辑和数据操作。 Struts是一个开源的...

Global site tag (gtag.js) - Google Analytics