YUI.ext中的Tree组件可以用来在页面实现树型布局的效果,包括常见的树型菜单等,那么我们怎样才能生成一个Tree呢,主要有以下四个步骤;
1.定义一个Tree对象:
var tree = new Ext.tree.TreePanel('tree', {
animate:true,
loader: new Ext.tree.TreeLoader({
dataUrl:'get-nodes.jsp',
baseParams: {lib:'yui'}
}),
enableDD:true,
containerScroll: true,
dropConfig: {appendOnly:true}
});
定义一个Tree对象时要声明该对象的ID以及相关的参数,如上所示,这个Tree对象的ID为tree,相关的参数包括是否有动画效果
(animate:true),树节点的数据来源(loader: new
Ext.tree.TreeLoader({dataUrl:'get-nodes.txt',baseParams:
{lib:'yui'}})),是否可以拖放节点(enableDD:true),是否包含滚动条(containerScroll:
true)以及节点拖放的配置(dropConfig: {appendOnly:true})等。
2.生成Tree的根节点:
var root = new Ext.tree.AsyncTreeNode({
text: 'yui-ext',
draggable:false,
id:'source'
});
tree.setRootNode(root);
首先生成一个节点,生成时可以定义该节点显示的文本(text属性),是否可以拖动(draggable属性,根节点需要定义为false),以及节点
ID,这个ID使得我们可以在页面上用document.getElementById来获取该节点,然后调用
tree.setRootNode(root)将该节点设置为树tree的根节点。
3.生成Tree的其他节点:
Tree的其他节点都需要从数据源中加载进来,创建Tree对象时就定义了获取数据源的路径--loader: new
Ext.tree.TreeLoader({dataUrl:'get-nodes.jsp',baseParams:
{lib:'yui'}}),其中get-nodes.jsp就是生成数据源的路径,而baseParams属性则定义了访问该路径时传入的HTTP请求
参数(可以有多个),页面在生成树时会调用XMLHttpRequest来访问该路径并将返回的数据解析成节点。除了可以使用WEB服务动态生成数据源以
外,你还可以使用静态文件做为数据源,YUI.ext只要求返回的数据格式类似下面这样即可:
[{'text':'welcome.html','id':'welcome.html','cls':'file',myPara:'myValue'},
{'text':'welcome2.html','id':'welcome2.html','leaf':true,'cls':'file','href':'welcome2.html'}]
这些数据是存储到一个数组中的,数组中的每一项代表一个节点,每一个节点都包含以下几个主要属性:
text:定义该节点显示的名称;
id:定义该节点的页面ID,便于document.getElementById方法获取该节点;
leaf:true或者false,定义该节点是否是叶子节点;
cls:定义该节点的class(显示的样式);
href:定义点击该节点后链接的页面;
另外你还可以为节点增加自定义的属性,方法如上面的myPara:'myValue'一样。
YUI.ext会自动将返回的数据解析成节点并正确显示到页面上。
4.为Tree添加事件处理:
a.当加入某个节点时,为其增加事件
tree.on('append', function(tree, node){
if(node.id == 'foo'){
// 这里加入你对该事件的处理
}
});
b.针对某个节点的单击事件
tree.on('click', function(node){
if(node.id == 'foo'){
// 这里加入你对click事件的处理
}
});
c.针对某个区域(集合)的事件
tree.getSelectionModel().on('selectionchange', function(sm,
node){
if(node && node.id == 'foo'){
// 这里加入你对该事件的处理
}
});
经过以上四步我们就可以生成一个比较完整的Tree对象了。
附:
JS源代码,该代码中生成了两棵树,一棵是YUI Tree,一棵是YUI.ext
Tree,并且一棵是用静态文件作为数据源,一棵是动态生成的数据源:
var TreeTest = function(){
// shorthand
var Tree = Ext.tree;
return {
init : function(){
// yui-ext tree
var tree = new Tree.TreePanel('tree', {
animate:true,
loader: new Tree.TreeLoader({dataUrl:'get-nodes.txt'}),
enableDD:true,
containerScroll: true,
dropConfig: {appendOnly:true}
});
// add a tree sorter in folder mode
new Tree.TreeSorter(tree, {folderSort:true});
// set the root node
var root = new Tree.AsyncTreeNode({
text: 'yui-ext',
draggable:false, // disable root node dragging
id:'source'
});
tree.setRootNode(root);
// render the tree
tree.render();
root.expand(false, false);
//-------------------------------------------------------------
// YUI
tree
var tree2 = new Tree.TreePanel('tree2', {
animate:true,
//rootVisible: false,
loader: new Ext.tree.TreeLoader({
dataUrl:'get-nodes.jsp',
baseParams: {lib:'yui'} // custom http params
}),
containerScroll: true,
enableDD:true,
dropConfig: {appendOnly:true}
});
// add a tree sorter in folder mode
new Tree.TreeSorter(tree2, {folderSort:true});
// add the root node
var root2 = new Tree.AsyncTreeNode({
text: 'Yahoo! UI Source',
draggable:false,
id:'yui'
});
tree2.setRootNode(root2);
tree2.render();
root2.expand(false, false);
}
};
}();
Ext.EventManager.onDocumentReady(TreeTest.init, TreeTest,
true);
对应的HTML代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
<title>Drag and Drop between 2
TreePanels</title>
<link rel="stylesheet" type="text/css"
href="../../../resources/css/ext-all.css" />
<!-- LIBS
-->
<script type="text/javascript"
src="../../yui-utilities.js"></script>
<script type="text/javascript"
src="../../ext-yui-adapter.js"></script>
<!-- ENDLIBS -->
<script type="text/javascript"
src="../../ext-all.js"></script>
<script type="text/javascript"
src="two-trees.js"></script>
<!-- Common Styles for the examples
-->
<link rel="stylesheet" type="text/css"
href="../examples.css" />
<style type="text/css">
#tree, #tree2 {
float:left;
margin:20px;
border:1px solid #c3daf9;
width:250px;
height:300px;
overflow:auto;
}
.folder .x-tree-node-icon{
background:transparent
url(../../resources/images/default/tree/folder.gif);
}
.x-tree-node-expanded .x-tree-node-icon{
background:transparent
url(../../resources/images/default/tree/folder-open.gif);
}
</
相关推荐
Ext JS4学习教程+笔记(一) Ext JS4学习教程+笔记(二)事件处理 ...Ext JS4学习教程+笔记(七)树面板Tree Panel Ext JS4学习教程+笔记(三)Ajax请求 Ext JS4学习教程+笔记(五)Form Panel的使用 Ext学习网址
最后,`extjs学习笔记三[Ext+json+jsp构建的动态树].mht`可能涵盖了一个基于EXT JS、JSON和JSP(Java Server Pages)构建动态树的教程。JSP通常用于动态生成HTML页面,而在这个案例中,它可能被用来生成JSON数据,...
对于动态树型结构,`Ext.tree.AsyncTreeNode`扮演着重要角色。如果一个节点没有`leaf:true`属性,那么当用户展开该节点时,Ext会通过树面板(`treepanel`)的加载器去向服务器请求数据,通常用于动态加载子节点。请求...
### ExtJS 学习笔记概览 #### 一、ExtJS 入门 **1.1 ExtJS 构成及如何引用** ExtJS 是一款基于 JavaScript 的开源框架,专为 Web 应用程序的前端界面设计。其核心优势在于提供了一套丰富的 UI 组件和强大的数据...
ExtJS4学习笔记(十五)---Ext.data.Model ExtJS4学习笔记(十六)---Combobox三级联动 ExtJS4学习笔记(十四)--- ComponentQuery ExtJS4学习笔记(四)---Grid的使用 Extjs4开发笔记(三)——菜单的实现 Extjs4开发笔记(二)...
这篇文档是针对初学者的Ext学习笔记,涵盖了JavaScript、CSS、数据库权限管理、JSP编码问题以及Flex/MXML等多个IT领域的基础知识。以下是这些知识点的详细解释: 1. JavaScript中的`replaceAll`方法:在JavaScript...
7. **EXT_JS实用开发指南**:`EXT_JS实用开发指南_个人整理笔记.docx`可能是作者的个人学习心得,其中包含了实践中遇到的问题和解决方案,对于初学者来说,这样的经验分享非常有价值。 8. **PDF和TXT文档**:`extjs...
ExtJS是一个开源的JavaScript库,主要用于...通过本笔记的学习,可以掌握ExtJS在前端开发中的应用,理解各个组件和管理器的使用方法,以及一些针对特定浏览器的布局技巧,为创建美观、高效的用户界面打下坚实的基础。
因为前段时间有两个专案要用到extjs技术,所以自己学了一段时间,在专案才发现extjs的强大,无论对于开发者还是使用者他都是一场视觉盛宴,这里有我从学习开始做的一些笔记和例子也有自己收集的学习资料,里面包括...
本文将基于标题“入门基础学习 ExtJS笔记(一)”和描述,介绍ExtJS的基础知识,特别是如何创建一个基本的界面框架。 首先,要使用ExtJS,我们需要引入必要的CSS样式表和JavaScript库。在HTML文件中,我们看到引用...
2. **核心组件文件**:在开发过程中,我们可能需要引用特定的组件库,如`ext-grid.js`(表格组件)、`ext-form.js`(表单组件)、`ext-tree.js`(树形组件)等。这些文件提供了构建用户界面所需的组件,例如数据网格...
常见文件系统类型包括ext2/3/4、JFFS2、YAFFS等,选择时要考虑稳定性、空间效率和擦写耐久性。 六、设备驱动程序 设备驱动程序是操作系统与硬件之间的桥梁,使得操作系统可以控制硬件设备。在嵌入式Linux中,编写或...
6. **文件系统构建**:嵌入式Linux的文件系统可以是基于ramdisk、JFFS2、YAFFS、FAT或ext4等格式。开发者需要创建包含所需应用程序、库和配置文件的文件系统映像。 7. **Bootloader**:Bootloader是启动过程中的第...
6. **PDF和DOC文档**:这两种格式的文档可能是教程或笔记,它们可能包含了作者的学习心得、实例代码和解决方案,便于读者理解并应用到实际项目中。 7. **CHM文件**:这是一种Windows的帮助文件格式,通常包含索引和...