`
laoqian9527
  • 浏览: 40696 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

treeview的异步加载

阅读更多
treeview的动态加载代码:
<li><span class='folder'>New Sublist</span>
      <ul>  
             <li><span class='file'>Item1</span></li>
             <li><span class='file'>Item2</span></li>
      </ul>
</li>
<!--因为它的结构和我的动态加载中的结构不同,我的动态html部分的结构如下-->
<ul>
    <li><span class='folder'>分类名称</span></li>
     ……
</ul>

 
ps:treeview本身的动态添加就无法cookie :)
treeview主要修改的不分:
1,jquery.treeview.js中添加的部分
		prepareBranchesForAjax: function(settings) {
			if (!settings.prerendered) {
				// mark last tree items
			
				
				//this.children("ul").find("li:last").addClass(CLASSES.last);
				this.find("li:last").addClass(CLASSES.last);

				// collapse whole tree, or only those marked as closed, anyway except those marked as open
				//this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide();
			}
			// return all items with sublists
			return this.filter(":has(>ul)");
		},
		prepareBranchesForDF: function(settings) {
			if (!settings.prerendered) {
				
				// mark last tree items
				//this.filter(":last-child:not(ul)").addClass(CLASSES.last);
				//this.filter(":last-child:has(ul)").addClass(CLASSES.last);
				// collapse whole tree, or only those marked as closed, anyway except those marked as open
				this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide();
			}
			// return all items with sublists
			return this.filter(":has(>ul)");
		},
  
2,query.treeview.edit.js修改的部分
return proxied.apply(this, arguments).bind("add", function(event, settings) {
			var branches = settings.add;
			var self = settings.self;
			$(branches).prev()
				.removeClass(CLASSES.last)
				.removeClass(CLASSES.lastCollapsable)
				.removeClass(CLASSES.lastExpandable)
			.find(">.hitarea")
				.removeClass(CLASSES.lastCollapsableHitarea)
				.removeClass(CLASSES.lastExpandableHitarea);

			/*异步加载的形成树的主要部分*/
			$(self).prepareBranchesForDF(settings).applyClasses(settings, $(this).data("toggler"));
			//$(branches).find("li").andSelf().prepareBranches(settings).applyClasses(settings, $(this).data("toggler"));
			
			$(self).prepareBranchesForAjax(settings);
		}).bind("remove", function(event, branches) {
 
页面部分:(在这里我没有做分离,全部堆在了页面中)
<%@ page language="java" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
	<html:base />
	<title>supplierSortAdd</title>
	<link rel="stylesheet" href="${pageContext.request.contextPath}/treeview/jquery.treeview.css" />
	<link rel="stylesheet" href="${pageContext.request.contextPath}/treeview/demo/screen.css" />
	
	<script src="${pageContext.request.contextPath}/treeview/lib/jquery-1.4.2.min.js" type="text/javascript"></script>
	<script src="${pageContext.request.contextPath}/treeview/lib/jquery.cookie.js" type="text/javascript"></script>
	<script src="${pageContext.request.contextPath}/treeview/jquery.treeview.js" type="text/javascript"></script>
	<script src="${pageContext.request.contextPath}/treeview/jquery.treeview.edit.js" type="text/javascript"></script>
	<script type="text/javascript">
	
		$(function() {
			$("#browser").treeview({control: "#treecontrol",persist: "cookie",cookieId: "#browser"});

			/*笨重的cookie*/
			var cookieContent = $.cookie("treeCookie");			
			if(cookieContent!=null && cookieContent.length>0){
			
				$("#browser").append(cookieContent);
				$("#browser").treeview();
			}
			
			/*ajax异步加载的设置*/
			$.ajaxSetup({
			  async: false
			});			
			
			$(".sort").click(function(){
				var supplierSortId = $(this).attr("title");
				
				var isOk = true;
				var begin = "<ul>" 					
				var end = "</ul>"
				var content = "";
				
				var haveContent = $("#browser").children("li").length;
				
				if(haveContent<=0){
					/*ajax部分我不做解释,我用的是最笨的方法,主要是treeview部分js的修改*/
					$.post("supplierSortManager.jsp",{method:"findSorts",supplierSortId:supplierSortId,time:Math.random()},function(json){
						if(json.isOk){							
							
							$.each(json.supplierSorts,function(i,supplierSort){
								var contentList = "<li><span class='folder' title='"+supplierSort.supplierSortId+"'>"+supplierSort.supplierSortName+"</span></li>";
								
								content+=contentList;
							});
						}else{
							isOk = false;
						}
					},"json");
					if(isOk){
						var titleContent = content;	
						alert(titleContent);
						$(titleContent).appendTo("#browser");
						$("#browser").treeview({add:$(titleContent),self:$("#browser")});
						
					}				
				}
				/*方法本身的最外层,*/
				cookieContent = $("#browser").html();
				$.cookie("treeCookie",cookieContent);
			});
			/*接点的点击事件*/
			$(".folder").live('click',function(){
				var supplierSortId = $(this).attr("title");
				
				var isOk = true;
				var begin =  "<ul>" 					
				var end = "</ul>"
				var content = "";
				
				var haveContent = $(this).parent().children("ul").length;

				/*没有子级查询数据库*/
				if(haveContent<=0){
					/*ajax部分我不做解释,我用的是最笨的方法,主要是treeview部分js的修改*/
					$.post("supplierSortManager.jsp",{method:"findSorts",supplierSortId:supplierSortId,time:Math.random()},function(json){
						if(json.isOk){						
							
							$.each(json.supplierSorts,function(i,supplierSort){
								var contentList = "<li><span class='folder' title='"+supplierSort.supplierSortId+"'>"+supplierSort.supplierSortName+"</span></li>";							
								content+=contentList;
							});						
						}else{
							isOk = false;
						}
					},"json");
				
					if(isOk){
						var titleContent = begin+content+end;		
						var prentElement = $(this).parent();		
						$(titleContent).appendTo(prentElement);		
						$("#browser").treeview({add:$(titleContent),self:prentElement});					
						
					}
					
				}
				/*方法本身的最外层,cookie部分*/
				cookieContent = $("#browser").html();
				$.cookie("treeCookie",cookieContent);
			});
			
			
		})
		
	</script>
</head>
<div class="dialogWin">
	<h1 class="sort" title="1" style="margin:0;padding:0;cursor:pointer;">供应商分类</h1>
	<ul id="browser" class="filetree">
		
	</ul>
</div>
</body>
</html:html>
 

 

    

 

有待改进的部分:

 1,接点展开折叠的cookie缓冲问题,(通过修改treeview的js代码)

 

  • treeview.rar (123.7 KB)
  • 描述: 内部有修改
  • 下载次数: 58
0
0
分享到:
评论

相关推荐

    ASP.NET treeView异步加载节点

    以上就是ASP.NET中实现TreeView异步加载的主要步骤和知识点。通过这种方式,我们可以构建一个既高效又用户友好的树形结构展示系统,尤其适用于处理大量或深度嵌套的数据。在实际应用中,还可以根据需求进行更复杂的...

    jQuery插件TreeView异步加载树

    本篇文章将深入探讨jQuery插件中的“TreeView”组件,特别是关于其异步加载树的实现。 TreeView是一种常见的UI元素,它通常用于展示层次结构的数据,如文件系统、组织结构等。在网页应用中,TreeView插件能够以树形...

    WPF异步加载DataGrid

    在本文中,我们将深入探讨如何在WPF(Windows Presentation Foundation)中实现DataGrid的异步加载,采用MVVM(Model-View-ViewModel)设计模式。MVVM是一种流行的设计模式,它将用户界面(View)、业务逻辑...

    WPF TreeView递归异步绑定

    1.节点是异步加载的(解决效率问题) 2.节点是无限级别的(递归的,这样可复用与目录结构、组织架构等数据类型) 3.节点是可以多选的(用CheckBox选择) 4.XAML方式绑定(减少UI上Code量) 5.方便得获取选中项信息

    bootstrap-treeview树节点实现动态加载(懒加载)

    本项目在官方Bootstrap Treeview的基础上进行了扩展,实现了懒加载功能。这意味着当用户首次访问树形视图时,只会加载根节点,当用户展开某个节点时,该节点的子节点才会在后台请求数据并动态添加到视图中。这样,...

    wpf mvvm treeview 动态加载(实现重命名与右键添加)

    在本文中,我们将深入探讨如何在WPF应用中利用MVVM模式动态加载并管理TreeView,同时实现节点的重命名和右键菜单功能。WPF(Windows Presentation Foundation)是微软提供的一个用于构建桌面应用程序的框架,而MVVM...

    jQuery Treeview异步树实现

    在这个异步树实现中,我们专注于如何在jQuery Treeview中集成异步加载功能,特别是与.NET 3.5及以上版本的后端接口协同工作。 异步加载对于大型数据集至关重要,因为它允许用户逐步加载数据,而不是一次性加载所有...

    异步加载树节点.zip

    "异步加载树节点"是一种策略,它允许我们分批次、按需地加载数据到TreeView中。当用户滚动或展开特定节点时,仅加载该节点及其子节点的相关数据。这样,只有在必要时才会请求服务器或数据库,减少对主线程的影响,...

    JavaFX TreeView数据库加载Node的实例

    在这个过程中,你可能还需要实现一个回调函数,以便在用户展开节点时异步加载子节点,以提高性能。这可以通过监听`TreeItem`的`expandedProperty()`并在`true`时触发加载逻辑来实现。 在Kx.java文件中,我们预计会...

    Extjs4树结构异步加载

    在本示例中,我们关注的是树结构的异步加载,这是一种优化性能的技术,避免一次性加载大量数据导致页面响应缓慢。 异步加载,也称为懒加载或需求加载,意味着当用户滚动、展开节点或者进行其他交互时,只加载当前...

    jquery treeview async

    以上就是使用Java和Servlet实现jQuery Treeview异步加载树形菜单的基本步骤。这个过程中,关键在于后端提供数据服务和前端动态构建及插入树节点。通过这种方式,我们可以创建一个响应快速、用户体验优良的树形菜单,...

    listview水平滚动条 多级动态异步加载 TreeView 安卓程序demo

    这个“listview水平滚动条 多级动态异步加载 TreeView 安卓程序demo”就是针对这种需求的一个实例,它展示了如何结合HorizontalScrollView来实现水平滚动,并且结合TreeView和多级动态异步加载技术,提高用户体验。...

    bootstrap-treeview动态加载后台数据菜单

    Bootstrap Treeview是一款基于...通过这些步骤,你就可以实现一个功能完备的Bootstrap Treeview,它能够动态地从后台加载数据,并在用户交互时按需加载更多内容。这不仅提高了页面性能,也提供了良好的用户体验。

    QML中动态创建组件(同步/异步)的方法

    对于`Loader`,你可以通过监听其`status`属性的变化来实现异步加载: ```qml Loader { id: myLoader source: "MyComponent.qml" onStatusChanged: { if (status === Loader.Loaded) { console.log("Component...

    无限递归treeview权限加载及分配

    例如,为了提高用户体验,可能会采用异步加载策略,只在需要时加载子节点,而不是一次性加载所有数据。此外,为了防止无限递归导致的栈溢出错误,递归函数需要有一个明确的退出条件。 总的来说,"无限递归treeview ...

    Jquery TreeView支持大数据加载树

    在标题“Jquery TreeView支持大数据加载树”中,重点在于它能够处理大量数据,这通常涉及到异步加载或分页技术,以优化用户体验和提高性能。 jQuery TreeView的基本使用包括以下几个关键知识点: 1. **安装与引入*...

    asp.net treeview控件动态加载数据,选中父节点和子节点处理

    - 通常采用Ajax技术,在用户点击某个节点时,通过Ajax异步请求服务器端接口获取子节点数据,然后更新TreeView控件。 - 这种方式可以避免整个页面的重新加载,提供更好的用户体验。 #### 三、选中父节点和子节点...

    treeview树加载

    对于大型数据集,为了提高用户体验,通常会采用异步加载策略。当用户展开节点时,才去后台加载其子节点。这可以通过`BeforeExpand`事件实现,使用`BeginInvoke`方法确保UI线程不会被阻塞。 6. **自定义节点** `...

    treeview+动态加载菜单的源代码

    1. **异步加载**:为了提高用户体验,避免一次性加载大量数据导致页面响应慢,动态加载通常采用异步方式。当用户滚动或点击某个节点时,通过Ajax请求获取需要的数据,然后在客户端动态添加到`treeview`中。 2. **...

Global site tag (gtag.js) - Google Analytics