使用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实现等比例缩放图片效果插件
Jul 24 Javascript
jquery插件开发方法(初学者)
Feb 03 Javascript
三种检测iPhone/iPad设备方向的方法
Apr 23 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
Oct 13 Javascript
JavaScript创建对象的方式小结(4种方式)
Dec 17 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
Jul 28 Javascript
angular ngClick阻止冒泡使用默认行为的方法
Nov 03 Javascript
Bootstrap模态对话框用法简单示例
Aug 31 Javascript
Vue实现微信支付功能遇到的坑
Jun 05 Javascript
详解webpack引用jquery(第三方模块)的三种办法
Aug 21 jQuery
JS实现电商商品展示放大镜特效
Jan 07 Javascript
JavaScript+HTML实现学生信息管理系统
Apr 20 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
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
php随机抽奖实例分析
2015/03/04 PHP
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
CodeIgniter钩子用法实例详解
2016/01/20 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
2016/10/08 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
JavaScript URL参数读取改进版
2009/01/16 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
js的一些常用方法小结
2011/06/29 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
jquery等待效果示例
2014/05/01 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
2015/10/10 Javascript
javascript实现全角转半角的方法
2016/01/23 Javascript
JavaScript实现的SHA-1加密算法完整实例
2016/02/02 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
原生JS实现导航下拉菜单效果
2020/11/25 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
JavaScript中Dom操作实例详解
2019/07/08 Javascript
基于ant design日期控件使用_仅月份的操作
2020/10/27 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
python获取一组汉字拼音首字母的方法
2015/07/01 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位
2013/01/23 HTML / CSS
亚马逊印度站:Amazon.in
2017/10/15 全球购物
运动会闭幕式解说词
2014/02/21 职场文书
法定授权委托证明书
2014/09/27 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
老干部座谈会主持词
2015/07/03 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
开网店计划分析
2019/07/30 职场文书
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis