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


Posted in Javascript onAugust 05, 2010

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

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

在浏览器地址栏中输入如下的URL:
http://localhost:8080/netdisk/tree/drapdrop.html
当显示出树形结点时,按上面的拖动方法来拖动结点,会出现如图1、图2和图3所示的拖动效果。
使用ExtJS技术实现的拖动树结点
        图1  【英语】结点将作为【计算机】的子结点
使用ExtJS技术实现的拖动树结点
图2  【英语】结点将作为【计算机】的兄弟结点,并移到【计算机】结点的前面(above拖放
使用ExtJS技术实现的拖动树结点
           图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所示。

使用ExtJS技术实现的拖动树结点
                图4  使叶子结点可以append

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

 

 

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

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

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

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

Javascript 相关文章推荐
jquery插件开发方法(初学者)
Feb 03 Javascript
用JavaScript实现动画效果的方法
Jul 20 Javascript
javascript垃圾收集机制与内存泄漏详细解析
Nov 11 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
Jun 09 Javascript
js实现的动画导航菜单效果代码
Sep 10 Javascript
跟我学习javascript的定时器
Nov 19 Javascript
jquery.cookie实现的客户端购物车操作实例
Dec 24 Javascript
JavaScript实现Fly Bird小游戏
Dec 15 Javascript
jQuery实现的简单无刷新评论功能示例
Nov 08 jQuery
JavaScript学习笔记之DOM基础操作实例小结
Jan 09 Javascript
vue 自动化路由实现代码
Sep 03 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
Oct 09 Javascript
JavaScript 获取当前时间戳的代码
Aug 05 #Javascript
firefox事件处理之自动查找event的函数(用于onclick=foo())
Aug 05 #Javascript
Js获取事件对象代码
Aug 05 #Javascript
zeroclipboard复制到剪切板的flash
Aug 04 #Javascript
jQuery Study Notes学习笔记 (二)
Aug 04 #Javascript
JQuery Study Notes 学习笔记(一)
Aug 04 #Javascript
jQuery dialog 异步调用ashx,webservice数据的代码
Aug 03 #Javascript
You might like
php页面函数设置超时限制的方法
2014/12/01 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
PHP动态生成指定大小随机图片的方法
2016/03/25 PHP
YII动态模型(动态表名)支持分析
2016/03/29 PHP
ExtJS 2.0 实用简明教程之布局概述
2009/04/29 Javascript
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
9个JavaScript评级/投票插件
2010/01/18 Javascript
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
javascript中json基础知识详解
2017/01/19 Javascript
js eval函数使用,js对象和字符串互转实例
2017/03/06 Javascript
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
JavaScript实现区块链
2018/03/14 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
express框架下使用session的方法
2019/07/31 Javascript
javascript使用Blob对象实现的下载文件操作示例
2020/04/18 Javascript
详解JS函数防抖
2020/06/05 Javascript
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
python绘图方法实例入门
2015/05/19 Python
Python实现合并excel表格的方法分析
2019/04/13 Python
一文了解Python并发编程的工程实现方法
2019/05/31 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
Lee牛仔裤澳大利亚官网:美国著名牛仔裤品牌
2017/09/02 全球购物
私人委托书格式
2014/09/10 职场文书
打架检讨书范文
2015/01/27 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
紧急通知
2015/04/17 职场文书
浅谈Python数学建模之固定费用问题
2021/06/23 Python