`
chenxueyong
  • 浏览: 342142 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

ext的tree学习笔记

阅读更多

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,并且一棵是用静态文件作为数据源,一棵是动态生成的数据源:
/*
* Ext JS Library 1.0 Beta 1
* Copyright(c) 2006-2007, Ext JS, LLC.
* licensing@extjs.com
*
* http://www.extjs.com/license
*/

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, /*no anim*/ 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, /*no anim*/ 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);
}
      </style>
</head>
<body>
<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
<h1>Drag and Drop betweens two TreePanels</h1>
<p>The TreePanels have a TreeSorter applied in "folderSort" mode.</p>
<p>Both TreePanels are in "appendOnly" drop mode since they are sorted.</p>
<p>Drag along the edge of the tree to trigger auto scrolling while performing a drag and drop.</p>
<p>The data for this tree is asynchronously loaded with a JSON TreeLoader.</p>
<p>The js is not minified so it is readable. See <a href="two-trees.js">two-trees.js</a>.</p>

<div id="tree"></div>
<div id="tree2"></div>

</body>
</html>

分享到:
评论

相关推荐

    Ext学习笔记

    Ext JS4学习教程+笔记(一) Ext JS4学习教程+笔记(二)事件处理 ...Ext JS4学习教程+笔记(七)树面板Tree Panel Ext JS4学习教程+笔记(三)Ajax请求 Ext JS4学习教程+笔记(五)Form Panel的使用 Ext学习网址

    ext tree json 例子(不含EXT包)

    最后,`extjs学习笔记三[Ext+json+jsp构建的动态树].mht`可能涵盖了一个基于EXT JS、JSON和JSP(Java Server Pages)构建动态树的教程。JSP通常用于动态生成HTML页面,而在这个案例中,它可能被用来生成JSON数据,...

    Ext学习笔记-个人版.doc

    对于动态树型结构,`Ext.tree.AsyncTreeNode`扮演着重要角色。如果一个节点没有`leaf:true`属性,那么当用户展开该节点时,Ext会通过树面板(`treepanel`)的加载器去向服务器请求数据,通常用于动态加载子节点。请求...

    老师整理的extjs学习笔记

    ### ExtJS 学习笔记概览 #### 一、ExtJS 入门 **1.1 ExtJS 构成及如何引用** ExtJS 是一款基于 JavaScript 的开源框架,专为 Web 应用程序的前端界面设计。其核心优势在于提供了一套丰富的 UI 组件和强大的数据...

    ExtJS4中文教程2 开发笔记 chm

    ExtJS4学习笔记(十五)---Ext.data.Model ExtJS4学习笔记(十六)---Combobox三级联动 ExtJS4学习笔记(十四)--- ComponentQuery ExtJS4学习笔记(四)---Grid的使用 Extjs4开发笔记(三)——菜单的实现 Extjs4开发笔记(二)...

    对初学者有帮助的Ext笔记

    这篇文档是针对初学者的Ext学习笔记,涵盖了JavaScript、CSS、数据库权限管理、JSP编码问题以及Flex/MXML等多个IT领域的基础知识。以下是这些知识点的详细解释: 1. JavaScript中的`replaceAll`方法:在JavaScript...

    Ext 资料snow

    7. **EXT_JS实用开发指南**:`EXT_JS实用开发指南_个人整理笔记.docx`可能是作者的个人学习心得,其中包含了实践中遇到的问题和解决方案,对于初学者来说,这样的经验分享非常有价值。 8. **PDF和TXT文档**:`extjs...

    ExtJS使用笔记

    ExtJS是一个开源的JavaScript库,主要用于...通过本笔记的学习,可以掌握ExtJS在前端开发中的应用,理解各个组件和管理器的使用方法,以及一些针对特定浏览器的布局技巧,为创建美观、高效的用户界面打下坚实的基础。

    extjs实例与学习资料

    因为前段时间有两个专案要用到extjs技术,所以自己学了一段时间,在专案才发现extjs的强大,无论对于开发者还是使用者他都是一场视觉盛宴,这里有我从学习开始做的一些笔记和例子也有自己收集的学习资料,里面包括...

    入门基础学习 ExtJS笔记(一)

    本文将基于标题“入门基础学习 ExtJS笔记(一)”和描述,介绍ExtJS的基础知识,特别是如何创建一个基本的界面框架。 首先,要使用ExtJS,我们需要引入必要的CSS样式表和JavaScript库。在HTML文件中,我们看到引用...

    ExtJs中引用的三个js

    2. **核心组件文件**:在开发过程中,我们可能需要引用特定的组件库,如`ext-grid.js`(表格组件)、`ext-form.js`(表单组件)、`ext-tree.js`(树形组件)等。这些文件提供了构建用户界面所需的组件,例如数据网格...

    2016年1月嵌入式linux笔记

    常见文件系统类型包括ext2/3/4、JFFS2、YAFFS等,选择时要考虑稳定性、空间效率和擦写耐久性。 六、设备驱动程序 设备驱动程序是操作系统与硬件之间的桥梁,使得操作系统可以控制硬件设备。在嵌入式Linux中,编写或...

    embeded-Linux-introduction-070822.rar_embeded_linux

    6. **文件系统构建**:嵌入式Linux的文件系统可以是基于ramdisk、JFFS2、YAFFS、FAT或ext4等格式。开发者需要创建包含所需应用程序、库和配置文件的文件系统映像。 7. **Bootloader**:Bootloader是启动过程中的第...

    extJS初级文档

    6. **PDF和DOC文档**:这两种格式的文档可能是教程或笔记,它们可能包含了作者的学习心得、实例代码和解决方案,便于读者理解并应用到实际项目中。 7. **CHM文件**:这是一种Windows的帮助文件格式,通常包含索引和...

Global site tag (gtag.js) - Google Analytics