使用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 相关文章推荐
javascript下操作css的float属性的特殊写法
Aug 22 Javascript
让div层随鼠标移动的实现代码 ie ff
Dec 18 Javascript
js判断鼠标同时离开两个div的思路及代码
May 31 Javascript
JavaScript知识点总结之如何提高性能
Jan 15 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
May 10 Javascript
教你一步步用jQyery实现轮播器
Dec 18 Javascript
AngularJS报错$apply already in progress的解决方法分析
Jan 30 Javascript
BootStrap注意事项小结(五)表单
Mar 10 Javascript
Vue项目中添加锁屏功能实现思路
Jun 29 Javascript
微信小程序实现漂亮的弹窗效果
May 26 Javascript
VUE简单的定时器实时刷新的实现方法
Jan 20 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
Jun 27 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 Smarty初体验二 获取配置信息
2011/08/08 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
php实现的Cookies操作类实例
2014/09/24 PHP
一个经典的PHP验证码类分享
2014/11/18 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
Javascript 中的类和闭包
2010/01/08 Javascript
潜说js对象和数组
2011/05/25 Javascript
jQuery使用animate创建动画用法实例
2015/08/07 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
JS实现非首屏图片延迟加载的示例
2018/01/06 Javascript
详解基于webpack&gettext的前端多语言方案
2019/01/29 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
基于python的汉字转GBK码实现代码
2012/02/19 Python
一个Python最简单的接口自动化框架
2018/01/02 Python
Django 浅谈根据配置生成SQL语句的问题
2018/05/29 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
Python魔法方法详解
2019/02/13 Python
python ---lambda匿名函数介绍
2019/03/13 Python
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
"引用"与指针的区别是什么
2016/09/07 面试题
什么是聚集索引和非聚集索引
2012/01/17 面试题
实习老师个人总结的自我评价
2013/09/28 职场文书
内科护士实习自我鉴定
2013/10/17 职场文书
《狐假虎威》教学反思
2014/02/07 职场文书
材料专业毕业生求职信
2014/02/26 职场文书
战略合作意向书
2014/07/29 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
小学新课改心得体会
2016/01/22 职场文书
ajax请求前端跨域问题原因及解决方案
2021/10/16 Javascript