使用dojo的tree

dojo的Tree很是灵活,但是官方网站上的例子却很少,而且也比较分散,后续将持续完善本例子。

总的来说,要使用tree,要接触到三个类:"dojo/store/JsonRest","dijit/tree/ObjectStoreModel","dijit/Tree"。

通过JsonRest异步从服务端获取数据。

ObjectStoreModel可以设置判断当前数据是否有子结点的方法、数据中哪个属性用来作为label显示在树中,数据使用什么图标显示等。

Tree具体显示树。

			var usGov = new JsonRest({
				target : "/rest/getTreeData",//获取树数据的URL
				getChildren : function(object) {//如何获取下级数据,这里与官方例子里的不一样,官方例子里要求返回的数据信息中要同时返回当前结点数据,大多数情况下这个是多余的,使用下面的程序, 服务端只需要返回下级结点数据的数组即可。
					if (typeof object.children == "undefined") {//这段程序,判断到当本结点的数据的下级数据已经有了后,就不需要再从服务端获取了。
						return this.query({PID:object.ID}).then(function(fullObject) {
							return fullObject;
						});
					} else {
						return object.children;
					}
				}
			});
			// create model to interface Tree to store
			var model = new ObjectStoreModel({
				store : usGov,
//				query: {PID: "root"},//通常情况下这个是不需要设置的,如果不设置,从服务端获取根结点数据时将不传参数
				mayHaveChildren : function(object) {//判断数据是否有儿子,当结点展开时是否会调用上面store中的getChildren方法,就是通过这个方法判断的
					return !object.leaf;//本处于官方例子不一样,并不是复用children属性的,程序更为清析。
				},
				getLabel : function(object) {//数据对象中个属性是用来显示在树结点中的。
					return object.NAME;
				}
			});<pre name="code" class="javascript">			var tree = new Tree({
				model : model,
				persist : false,
				showRoot : true,
				region : 'center',//如果父容器是BorderContainer,指定树显示在该父容器中间
				style : "overflow:hide;padding:0px;"
			});


本树结点第一次从服务端获取根结点的数据例子:
<pre name="code" class="javascript">[{NAME: "US Government",
  id: "a1",ID:"1",
  leaf:false,
  children:[{
           NAME: "Congress2",
           id: "a2",
           ID:"2",
           leaf:false
          },{
           NAME: "Congress3",
           id: "a3",
           ID:"3",
           leaf:true
          }]
}]

</pre><pre code_snippet_id="500089" snippet_file_name="blog_20141028_20_3872161" name="code" class="javascript">展开树中Congress2结点时从服务端获取的数据例子:
<pre name="code" class="javascript">[{ NAME: "Congress4",
     id: "a4",
      ID:"4",
      leaf:false,
      children:[{
                   NAME: "Congress6",id: "a6",ID:"6",leaf:true},
                  {NAME: "Congress7",id: "a7",ID:"7",leaf:true}]},
      {NAME: "Congress5",id: "a5",ID:"5",leaf:true}]

特别要注意,数据中的id属性一定要有,并且不能重复,否则在结点展开的时候可能不会触发从后台获取数据的动作。

时间: 2024-08-27 20:06:02

使用dojo的tree的相关文章

dojo创建tree

今天介绍dojo目录树的效果,效果如下图: HTML代码如下: <body class="claro"> <div id="rootlessTree" data-dojo-type="dijit/Tree"></div> </body> Js代码如下: require([ "dojo/dom", "dojo/json", "dojo/store/Me

dojo组件使用---tree组件的局部更新

dojo的tree组件使用主要涉及的几个api: 1.dijit/Tree:树组件 2.dijit/Tree._TreeNode:树节点组件,局部更新时就是修改这个组件.(由于数组件的store使用Memory,所以需要手动同步更新store): 3.dijit/tree/ObjectStoreModel:数组件数据操作模块. 具体操作: 1.拿到dijit/Tree._TreeNode实例对象.树组件的每个节点都是一个dijit/Tree._TreeNode对象,通过selectedNode/

Dojo Tree设置默认选中项并且获得它

在使用CSS3的中有如下类似代码 Html代码 @media screen and (max-width:480px){ -- } 意思是在最大宽度为480px的设备上应用{}里面的样式.这里的width,注意是手机浏览器的分辨率,而不是手机设备的屏幕分辨率.比如苹果4的手机屏幕分辨率是960x640.而其自带的Safari浏览器的分辨率是320*480.我们可以通过如下代码检测所用的浏览器的分辨率: Js代码 $("#info").html("(您的浏览器的分辨率为:&qu

带CheckBox的dojo Tree简单实现,并实现级联选取

dojo自带的Tree不能实现CheckBox选取节点功能,第三方cbtree过于复杂,因此自己写了个简单的实现,能够实现子节点级联父节点直到根节点,父节点选取全选子节点的功能,但没有写父节点取消时的子节点取消,代码如下,大家可以自行拷贝修改 function createMenuTree() {            require(["dojo/request",               "dojo/store/Memory",              

翻译 - 【Dojo Tutorials】Connecting a Store to a Tree

原文:Connecting a Store to a Tree Dojo Tree组件是一个强大的展示层级数据的工具.该教程将展示如何连接tree与store来快速有效的展示层级数据. 介绍 Dojo Tree组件为展示层级数据提供了一种综合的,熟悉的,直观的方式.它将展示与数据分离.本文将提到为驱动一个tree提供数据的多种方法. 第一个例子使用一个静态tree,其数据从一个JSON文件中获取.这可以用于通过数据提供导航.第二个例子在这个设计的基础上扩展新的强大功能,如拖拽,维护一个动态的tr

dojo Tree 添加、删除节点

var tree=this.tree; var store=tree.model.store; if(this.node){ console.log(this.node) var children=this.node.getChildren(); for(var i=0;i<children.length;i++){ store.deleteItem(children[i].item) } var features=_featureset.features; for(var i=0;i<fea

dojo中创建包含节点复选框的树形(CheckBoxTree)

树形结构是界面设计程中常见的部件,在代码实现时有很多方法,但由于设计到节点的父子关系和dom节点操作,实现起来比较复杂.dojo中提供了带复选框的树形部件CheckBoxTree,使用时只需创建对应的实例即可轻松实现此功能. 部件对应的html文件代码如下: <div> <div dojoType="dijit.Dialog" dojoAttachPoint="testList" title="${title}" style=&

dropdown tree

这上面是一个用户的基本信息表单,那么组织结构这里是一个可选择的DropdownTree,现在我们就是要做这么一个通用的DropdownTree 我们的组织结构的html是这样一个代码片段: <td width="90px"><label>组织机构</label></td> <td>    <input type="hidden" name="organizationId" dojo

Dojo教程翻译索引

Getting Started Dojo Start 原文 翻译 Hello Dojo!原文 翻译 Modern Dojo 原文 翻译 Configuring Dojo with dojoConfig 原文 翻译 Fundamentals Classy JavaScript with dojo/_base/declare 原文 翻译 Creating Templte-based Widgets 原文 翻译 Using dojo/query 原文 翻译 NodeList Extensions 原文