`
samuel5_1
  • 浏览: 15470 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转)EXT树总结

阅读更多
转自http://www.blogjava.net/JaVaa/archive/2007/04/12/110070.aspx

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 的拖动效果,现在做一些总结,c趁现在还清醒,怕以后忘记: 设置拖放的一些通用属性:enableDrag – 是否可拖动 enableDrop : 是可放置 isTarget : 是否为目标 ddGroup:“拖放组名” ...

    Ext Js权威指南(.zip.001

    7.5.11 树节点:ext.data.nodeinterface与ext.data.tree / 364 7.5.12 store的方法 / 366 7.5.13 store的事件 / 368 7.5.14 store管理器:ext.data.storemanager / 369 7.6 综合实例 / 369 7.6.1 远程读取json...

    GWT-ext 布局示例

    本文是 GWT-Ext 体验之旅系列 的第 3 部分,我们将体验各种布局管理器的效果,了解我们常用的布局管理器的编程方式和一些经验总结。在对树的介绍中,我们将从树的同步和异步方式的初始化到树的 一些特性进行详细介绍...

    快意编程 EXT JS Web开发技术详解.pdf

    《快意编程:Ext JS Web开发技术详解》是笔者在多年项目开发过程中的经验总结,它通过丰富的实例由浅入深、循序渐进地介绍了目前采用Ext JS进行Web开发的使用方法,从而帮助软件设计人员快速掌握Ext JS开发技术的使用...

    extJs 2.1学习笔记

    extJs 2.1学习笔记 此资料收集于网上.. ...25. extJs 2.0学习笔记(Ext.Element API总结) 69 26. extJs 2.0学习笔记(Element.js篇) 73 27. extJs 2.0学习笔记(DomHelper.js篇) 76 28. extJs 2.0学习笔记(ext.js篇) 77

    EXTJS总结.txt

    1.Ext.get var el = Ext.get('myElementId');//获取元素,等同于document.getElementById('myElementId');//会缓存 2. Ext.fly var el = Ext.fly('myElementId')//不需要缓存。 注:享元模式(Flyweight Design ...

    ExtJs学习笔记,共30讲

    ExtJs学习笔记,共30讲 ...25. extJs 2.0学习笔记(Ext.Element API总结) 69 26. extJs 2.0学习笔记(Element.js篇) 73 27. extJs 2.0学习笔记(DomHelper.js篇) 76 28. extJs 2.0学习笔记(ext.js篇) 77

    Extjs中ComboBoxTree实现的下拉框树效果(自写)

    最近涉及到的一个项目中,需要实现ComboBoxTree的效果,首先,看看效果吧…… 在Extjs中是没有这种效果的,所以得自己写,在网络上看了看别人的资料,自己再总结了一下,修改了一下,代码如下: 代码如下: Ext.ux....

    SSH+extjs+json动态树的构造(附详细步骤及源码)

    本文档是自己亲身实践的总结文档,包括构造ext动态树的js代码,action层,service层,dao层以及实体类的示例,思路很清晰。如还有疑问,可以留言。最后附上了一段增加树节点的示例。删除修改类同。

    疯狂内核之——虚拟文件系统

    3.2.4 Ext2的方法总结 126 3.3 Ext2索引节点分配 129 3.3.1 创建索引节点 130 3.3.2 删除索引节点 143 3.4 Ext2数据块分配 144 3.4.1 数据块寻址 145 3.4.2 文件的洞 147 3.4.3 分配数据块 148 4 页面高速缓存 160 ...

    Extjs表单中的通用组件

    在实践中总结的文档,适用于Ext的初学人群!

    SQLServer死锁总结

    这些资源可能是:单行(RID,堆中的单行)、索引中的键(KEY,行锁)、页(PAG,8KB)、区结构(EXT,连续的8页)、堆或B树(HOBT)、表(TAB,包括数据和索引)、文件(File,数据库文件)、应用程序专用资源(APP)、元数据...

    代码生成器Mgicode生成器JAVA代码生成器

    由《Ext JS源码分析与开发实例宝典》作者:彭仁夔团队开发而成 90%以上代码可以生成验证、生成三层代码、生成完善的权限系统、生成数据库等功能 功能之强大用了就知道! 两年前,我负责指导Java方向实训,在最后...

    Mgicode代码生成器

    由《Ext JS源码分析与开发实例宝典》作者:彭仁夔团队开发而成 根据数据模型(如数据库、PDM等)可以生成直接运行的SSH项目,初始化数据库数据等。在当前的模板中生成完善的CRUD操作,生成验证,根据不同的类型生成...

    Migcode代码生成器使用说明书

    由《Ext JS源码分析与开发实例宝典》作者:彭仁夔团队开发而成 根据数据模型(如数据库、PDM等)可以生成直接运行的SSH项目,初始化数据库数据等。在当前的模板中生成完善的CRUD操作,生成验证,根据不同的类型生成...

    Mgicode 代码生成器SSH模板

    由《Ext JS源码分析与开发实例宝典》作者:彭仁夔团队开发而成 根据数据模型(如数据库、PDM等)可以生成直接运行的SSH项目,初始化数据库数据等。在当前的模板中生成完善的CRUD操作,生成验证,根据不同的类型生成...

    Ubuntu权威指南(2/2)

    4.1.1 树形层次结构 87 4.1.2 路径名 88 4.2 文件系统的组织结构 88 4.3 文件的类型 92 4.3.1 普通文件 92 4.3.2 目录文件 94 4.3.3 特殊文件 95 4.3.4 链接文件 98 4.3.5 符号链接文件 99 4.3.6 管道文件 101 4.4 ...

Global site tag (gtag.js) - Google Analytics