使用ExtJS技术实现的拖动树结点_extjs

一、结点拖放的位置
拖放结点包含了两个动作,拖(drag)和放(drop)。拖很好理解,就是将结点拖起来,拖哪一个结点的效果都是一样的。不过放结点就比较复杂了。放结点可分为如下两种情况:

追加(append)结点:如果将拖动的结点正好放在非叶子结点的上面,TreePanel组件会将这个结点移动到非叶子结点下面作为该结点的子结点。由于TreePanel的限制,叶子结点不能append。
在同一层做上下移动(above和below): 如果将拖动的结点放在叶子结点上,或放在非叶子结点的侧面,会将拖动结点作为兄弟结点来放置。
下面的设置将TreePanel组件设为结点可拖动状态。

在浏览器地址栏中输入如下的URL:
http://localhost:8080/netdisk/tree/drapdrop.html
当显示出树形结点时,按上面的拖动方法来拖动结点,会出现如图1、图2和图3所示的拖动效果。

        图1  【英语】结点将作为【计算机】的子结点

图2  【英语】结点将作为【计算机】的兄弟结点,并移到【计算机】结点的前面(above拖放

           图3  两个叶子结点交互位置(below拖放)
二、使叶子结点可以append

在默认情况下,TreePanel规定叶子结点不允许append。不管这个限制合理还是不合理,为了保持ExtJS版本的兼容性,读者应尽量不修改ExtJS的源代码。不过有时需要在叶子结点上append。那么在这种情况下,我们可以通过TreePanel的nodedragover事件来解决。
TreePanel会在内部判断,如果结点的leaf参数为true,则会允许该结点append。了解了TreePanel禁止结点append的原理,就很容易通过nodedragover事件来解决这个问题。
在nodedragover事件方法中有一个参数,通过该参数值的target属性可以获得拖动结点放置的目标结点。并在nodedragover方法中将该结点的leaf属性值设为false,代码如下:

复制代码 代码如下:

tree.on("nodedragover", function(e){
var node = e.target;
if(node.leaf)
node.leaf=false;
return true;
});

在浏览器地址栏中输入如下的URL:
http://localhost:8080/netdisk/tree/leafappend.html
显示树形结构后,将某个结点拖动到叶子结点处,然后放下,就会在叶子结点下生成一个子结点,而且叶子结点的图标会变成非叶子结点的图标,如图4所示。


                图4  使叶子结点可以append

除此之外,树结点还有其他的拖动方式,内容请见
《人人都玩开心网:Ext JS+Android+SSH整合开发Web与移动SNS》 一书的相关章节。

 

 

《Android/OPhone开发完全讲义》(本书版权已输出到台湾)

 样章和目录下载
 互动网  当当网  卓越亚马逊

《人人都玩开心网:Ext JS+Android+SSH整合开发Web与移动SNS》
 样章下载
 互动网

 乐博Android手机客户端(新浪微博)发布

时间: 2024-09-21 00:30:42

使用ExtJS技术实现的拖动树结点_extjs的相关文章

《人人都玩开心网:Ext JS+Android+SSH整合开发Web与移动SNS》销售排名第4,发篇ExtJS的文章(拖放树结点)庆祝下

    <人人都玩开心网:Ext JS+Android+SSH整合开发Web与移动SNS>一书上架短短几天,就进入了互动网计算机类销售总排名第4的好成绩(见下图).现发篇Ext JS的技术文章庆祝下. 拖放树结点 在本文将介绍TreePanel组件非常有意思的一个功能:结点拖放.要使TreePanel组件的结点可以拖放非常简单,只需要将TreePanel类的enableDD选项参数设为true即可.当然,要想实现更复杂的功能,还需要配合其他的参数和事件. 一.结点拖放的位置 拖放结点包含了两个

c++-MFC单文档 CTreeView 树结点前加小图标的方法

问题描述 MFC单文档 CTreeView 树结点前加小图标的方法 RT.是在视图分割了以后要用到的. 要在每个根项前加一个图标1,同时在根项的子项前加图标2 不太了解这块..麻烦讲详细点,万分感谢! 解决方案 参考:http://blog.csdn.net/lifu119/article/details/7024268 关键点: himl=ImageList_Create(16,16,ILC_COLOR32,1,12); ImageList_Add(himl,LoadBitmap(hInstX

利用EXTJS来显示LDAP的树状结构

下列程序主要是利用EXTJS的tree对LDAP中的数据进行一层层list出现,显示为一个树状.有点类似Softerra LDAP的结构.可以添加类似的操作,比如:修改.拖拽等等.在这就没列出了.程序用到了Spring-Ldap 所以需要相应的包.extjs用的是2.3.0: 树的js代码 Operate.js代码 buildUnitTree=function(){ //定义根节点的Loader // var treeloader=new Tree.TreeLoader({dataUrl:'un

如何显示树结点的时间属性?

问题描述 我想要达到的效果是,当我点击根结点时,将根结点的时间属性的值显示在form里.这是我定义的一树,它只有一个根结点:var form = new Ext.FormPanel({labelAlign: 'center',labelWidth:70,labelSeparator : ":",frame:true,border:false,defaultType: 'textfield',items: [ new Ext.form.DateField({ fieldLabel: '时

Extjs入门之动态加载树代码_extjs

Extjs动态加载树,首先在数据库里面设计存放树信息的表 复制代码 代码如下: USE [KimiExtjs] GO /****** 对象: Table [dbo].[Trees] 脚本日期: 04/08/2010 22:12:25 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Trees]( [Tid] [varchar](40) COLLA

自定义ExtJS控件之下拉树和下拉表格附源码_extjs

简介 在Ext官方的例子中只有下拉列表控件,但是在实际业务中只有下拉列表无法满足需求的,像下拉树和下拉表格都是很常见的控件,对于刚使用Ext的人来说,自定义一个控件好难,其实多读官方的源码有些事情就不会那么难了.下面是下拉树的代码: 复制代码 代码如下: Ext.define('ComboTreeBox',{ extend : 'Ext.form.field.ComboBox', multiSelect : true, createPicker : function(){ var me = th

一起谈.NET技术,Silverlight 拖动复制控件

Silverlight 拖动复制控件,就是将控件从一个容器中向另一个容器中拖动时,不是移动控件而把该控件到另一个容器中.这种情形在程序中经常遇到,下面是我做的一个拖动复制控件的示例,仅供有这种需求的朋友们参考. 新建一个 Silverlight 项目命名为 DragAndCopy ,在新建的项目中添加一个Silverlight 用户控件(Silverlight user control)命名为 DragObject.项目结构如下图所示: 其中 DragObject 就是要拖动的用户控件,Drag

Extjs学习笔记之四 工具栏和菜单_extjs

ToolBar的使用很简单,关键是向ToolBar上面添加内容,默认地ToolBar添加的是Button,不过实际上可以向Toolbar添加任意的组件.下面是一个例子: 复制代码 代码如下: <script type="text/javascript"> Ext.onReady(function() { var tb = new Ext.Toolbar({ renderTo: document.body, width: 600, height: 100, items: [

JavaScript的ExtJS框架中表格的编写教程_extjs

ExtJS中表格的特性简介表格由类Ext.grid.GridPanel定义,继承自Ext.Panel,xtype为grid 表格的列信息由Ext.grid.ColumnModel定义 表格的数据存储器由Ext.data.Store定义,根据解析数据的不同,数据存储器可具体分为如下几种: JsonStore,SimpleStore,GroupingStore- 一个表格的基本编写过程: 1.创建表格列模型 var cm = new Ext.grid.ColumnModel({ {header: '