使用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中each()的使用方法说明
Aug 19 Javascript
15款优秀的jQuery导航菜单插件分享
Jul 19 Javascript
js判断客户端是iOS还是Android等移动终端的方法
Dec 11 Javascript
JS网页图片按比例自适应缩放实现方法
Jan 15 Javascript
js replace替换所有匹配的字符串
Feb 13 Javascript
node.js中的fs.read方法使用说明
Dec 17 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
Jun 22 Javascript
slideToggle+slideup实现手机端折叠菜单效果
May 25 Javascript
Vue父组件如何获取子组件中的变量
Jul 24 Javascript
微信小程序8种数据通信的方式小结
Feb 03 Javascript
如何使用JS console.log()技巧提高工作效率
Oct 14 Javascript
vue中如何自定义右键菜单详解
Dec 08 Vue.js
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
使用Huagepage和PGO来提升PHP7的执行性能
2015/11/30 PHP
PHP dirname(__FILE__)原理及用法解析
2020/10/28 PHP
JS中简单的实现像C#中using功能(有源码下载)
2007/01/09 Javascript
控制打印时页眉角的代码
2007/02/08 Javascript
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
jquery一般方法介绍 入门参考
2011/06/21 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
JS记录用户登录次数实现代码
2014/01/15 Javascript
js读取被点击次数的简单实例(从数据库中读取)
2014/03/07 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
ajax与jsonp的区别及用法
2018/10/16 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
浅谈Vue组件单元测试究竟测试什么
2020/02/05 Javascript
详解Python中的循环语句的用法
2015/04/09 Python
python中sys.argv参数用法实例分析
2015/05/20 Python
在Python中定义一个常量的方法
2018/11/10 Python
python如何将两个txt文件内容合并
2019/10/18 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
python实现简单猜单词游戏
2020/12/24 Python
详解CSS3中字体平滑处理和抗锯齿渲染
2017/03/29 HTML / CSS
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
解析html5 canvas实现背景鼠标连线动态效果代码
2019/06/17 HTML / CSS
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
如何获得EntityManager
2014/02/09 面试题
ktv收银员岗位职责
2013/12/16 职场文书
青年教师典范事迹材料
2014/01/31 职场文书
网络工程师职业规划
2014/02/10 职场文书
动画设计系毕业生求职信
2014/07/15 职场文书
幽灵公主观后感
2015/06/09 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书
numpy数据类型dtype转换实现
2021/04/24 Python
Golang并发工具Singleflight
2022/05/06 Golang