使用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 动态设置已知select的option的value值的代码
Dec 16 Javascript
在JavaScript中获取请求的URL参数[正则]
Dec 25 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
Aug 12 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
Mar 04 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
Dec 14 Javascript
ionic2 tabs使用 Modal底部tab弹出框
Dec 30 Javascript
微信小程序手势操作之单触摸点与多触摸点
Mar 10 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
Sep 07 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
Jun 21 Javascript
vue下载二进制流图片操作
Oct 26 Javascript
vue动态合并单元格并添加小计合计功能示例
Nov 26 Vue.js
为什么推荐使用JSX开发Vue3
Dec 28 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
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
基于javascript实现listbox左右移动
2016/01/29 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python 除法小技巧
2008/09/06 Python
Python可跨平台实现获取按键的方法
2015/03/05 Python
Python中正则表达式的详细教程
2015/04/30 Python
Python图像灰度变换及图像数组操作
2016/01/27 Python
Tensorflow之Saver的用法详解
2018/04/23 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
python简单操作excle的方法
2018/09/12 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
2019/07/12 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
Python 根据数据模板创建shapefile的实现
2019/11/26 Python
python dataframe NaN处理方式
2019/12/26 Python
Python 列表的清空方式
2020/01/13 Python
keras中的backend.clip用法
2020/05/22 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
英国领先的办公用品供应商:Viking
2016/08/01 全球购物
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
平面设计岗位职责
2013/12/14 职场文书
酒店员工职业生涯规划
2014/02/25 职场文书
新闻报道策划方案
2014/06/11 职场文书
好的旅游活动方案
2014/08/19 职场文书
2014年教育实习工作总结
2014/11/22 职场文书
孩子满月酒答谢词
2015/09/30 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书