感谢reedseutozte的投稿,一篇关于dijit.Tree的使用方法介绍,非常好的文章,也很能体现出Dojo的核心设计思想。作为最常用的一个控件,相信这篇文章能帮助到很多同学。再次感谢reedseutozte,为Dojo中文博客带来了第一篇投稿文章:)
概述
Dojo的dijit.tree的代码结构完全遵循MVC结构,结构非常严谨:
M:model使用了dojo基础包提供的dojo.data.itemFileReadStore(只读)或者dojo.data.itemFileWriteStore(可读写)。Tree并不直接使用Store而是通过dijit.tree.TreeStoreModel这个类将sotre和树形结构所需要的结构的进行串接。
V:view就是tree.js中定义的dijit.tree和dijit_TreeNode。这个类主要完成前台的界面渲染,以及树上节点对象之间的管理。
C:_dndSelector.js这个文件名称开始迷惑了我,后来才发现即使不使用拖拽特性,该类中的代码依然会被调用,这个类定义选中节点,删除节点,增加节点,托拽节点的操作。
网上关于tree 的资料根多,而且dojo自身也提供了丰富的样例,这里介绍一些其样例中没有涉及的一些用法。
树的懒加载(lazy load)其实懒加载本身没什么太多的问题,只是有两点需要说明
图标处理Dojo对于叶子/非叶子节点的图标处理时会做自动判断。在懒加载时由于有些节点没有加载子节点,dojo在处理这些节点的图标的时候会显示默认的叶子图标,所以这里需要重 新实现treemodel的mayHaveChildren方法,代码如下
节点加载Dojo树最大的特点就是完全可以靠数据驱动,因此节点的加载,完全可以通过往对应的 父节点的数据项中增加childran实现,参见如如下代码:
增加/删除/修改节点之前已经说过dojo的tree采用了MVC模式,因此上述操作完全可以通过对store的操作实现
1. 增加
上面的懒加载代码已经列出这里不再赘述
2. 修改:
假设需要修改的节点的treeNode对象实例为node
3. 删除
假设需要删除的节点的treeNode对象实例为node
鼠标函数上面说了很多,可以发现所有操作都需要获取树节点对应的dojo对象才可以进行。那么这个对象如何获得呢?我们知道对树的操作分为两种,左键点击或者右键菜单,鼠标点中了相对应的节点就可继续往下操作,因此下面介绍如何通过鼠标事件获得节点对象
click
rightClick
右击一般是打开菜单,这里的菜单也是dojo的,因此判断函数为
代码选中节点
托拽控制Dojo的树提供托拽功能,使用托拽功能需要在实例化tree的时候将tree的dndController属性定义为’dijit.tree.dndSource' 。betweenThreshold为0表示不允许同目录下拖动。
实际应用中我们要增加一些限制,这坐介绍两种
i)选中的对象是否允许拖拽
ii)判断目标节点是否接受正在拖拽的对象
分享到:
相关推荐
本手册适合新手和有经验的开发者,旨在提供一个全面的DOjo使用指南。 DOjo安装 DOjo提供了三种安装方式:使用美国在线(AOL)的内容分发网络(CDN),在本地使用稳定版本,和从DOjo网站的SVN服务器上获取最新代码...
本例主要介绍了如何使用Dojo来创建一个具有增删改查功能的动态树。 首先,让我们了解Dojo Tree的基本结构。Dojo Tree由`dijit/tree/ForestStoreModel`作为数据模型,`dijit/Tree`作为视图层,以及`dojo/store`作为...
【基于Dojo的动态树】是一种使用JavaScript库Dojo Toolkit创建的交互式树形结构,常用于展现层次化的数据或导航菜单。Dojo Toolkit是一个功能强大的JavaScript库,它提供了多种UI组件,包括Tree组件,可以方便地在...
本教程将深入探讨Dojo框架的使用,帮助开发者更好地理解和应用这一工具。 首先,从`dojo-release-0.9.0.tar.gz`这个文件名可以看出,这是一个Dojo框架的早期版本,版本号为0.9.0。在学习过程中,了解不同版本间的...
### Dojo控件的使用和入门心得 #### Dojo简介及其优势 Dojo是一个功能强大的JavaScript框架,专门设计用于简化富互联网应用(RIA)的开发。作为一种DHTML Toolkit,Dojo封装了大量的常用功能,旨在提高前端开发...
和前一个树形菜单 大多数例子是基于 PHP 的 发现很多 dojo 学者想下载 dojo 的API…… 结论是:下不到的! 发现很多想下载一些帮助例子,在http://download.dojotoolkit.org/ 下才能找到,进去点版本,比如 ...
在Dojo中,我们可以使用`dijit.tree.ForestStoreModel`来定义数据模型,`dijit.Tree`来创建树视图。每个节点可以包含子节点,通过递归的方式展示层次结构。配置包括定义节点的数据标识(id),以及如何获取子节点的...
dojo异步树.js 实现异步加载节点功能
dojo0.9 使用心得 dojo学习笔记(一)-dojo.io.IO & dojo.io.BrowserIO) dojo学习笔记(三) dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane ...
1. **模块系统**:Dojo使用AMD(Asynchronous Module Definition)模块定义协议,允许异步加载模块。`require`和`define`是两个关键函数,`require`用于加载模块,`define`用于定义模块。 2. **dojo/_base**:这是...
dojo0.9 使用心得 dojo学习笔记(一)-dojo.io.IO & dojo.io.BrowserIO) dojo学习笔记(三) dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane ...
dojo0.9 使用心得 dojo学习笔记(一)-dojo.io.IO & dojo.io.BrowserIO) dojo学习笔记(三) dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane ...
dojo异步树js
dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档
在 Dojo 中,使用 `dojo.require` 来声明所需的模块和包,类似于其他编程语言中的导入或使用语句。 `djConfig` 是 Dojo 的全局配置对象,允许你在页面加载前设置 Dojo 的行为。例如,`isDebug` 属性可以设置为 `...
在使用Dojo时,通常会先加载这个基础模块。 3. **dojo/ready**: 用于在DOM准备就绪或页面完全加载后执行指定的函数,是Dojo中的一个重要概念,确保在执行代码时,DOM已经完全构建完毕。 4. **dojo/store**: 提供了...
通过使用dojo.require和dojo.provide,开发者可以实现代码的模块化,提高代码复用性和可维护性。 Dojo的dojo.query方法类似于jQuery的选择器,用于选取页面中的DOM元素。此外,Dojo还提供了一套强大的DOM操作API,...
20. **dojo.xml、dojo.dom**:DOM操作和XML辅助函数,帮助处理XML文档和DOM树。 21. **dojo.style**:CSS相关的功能,如获取和设置元素样式,与浏览器的盒模型兼容。 在实际使用中,如需使用日期控件,首先需要...
在使用Dojo进行Ajax通信时,Dojo的`dojo.xhr`模块提供了与服务器端进行异步数据交换的接口。它可以处理各种HTTP请求类型,如GET、POST、PUT和DELETE,支持JSON、XML等多种数据格式,为开发者提供了统一的API。 Dojo...
dojo js dojo js dojo js dojo js dojo js dojo js dojo js