使用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的9个陷阱及评点分析
May 16 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
Jun 20 Javascript
js 实现浏览历史记录示例
Apr 20 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
Dec 17 Javascript
Node+Express+MongoDB实现登录注册功能实例
Apr 23 Javascript
浅析为什么a="abc" 不等于 a=new String("abc")
Oct 25 Javascript
Vue修改mint-ui默认样式的方法
Feb 03 Javascript
微信小程序实现折叠与展开文章功能
Jun 12 Javascript
详解JavaScript添加给定的标签选项
Sep 17 Javascript
JS实现倒计时图文效果
Nov 17 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
Aug 20 Javascript
Openlayers实现地图全屏显示
Sep 28 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/11/10 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
javascript开发中因空格引发的错误
2010/11/08 Javascript
基于jQuery选择器的整理集合
2013/04/26 Javascript
js脚本获取webform服务器控件的方法
2014/05/16 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
Vue按需加载的具体实现
2017/12/02 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
如何自定义微信小程序tabbar上边框的颜色
2019/07/09 Javascript
微信小程序 行的删除和增加操作实现详解
2019/09/29 Javascript
基于原生js实现九宫格算法代码实例
2020/07/03 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
详解Python安装scrapy的正确姿势
2018/06/26 Python
python3.6实现学生信息管理系统
2019/02/21 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
Python实现列表索引批量删除的5种方法
2020/11/16 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
C#的几个面试问题
2016/05/22 面试题
常用UNIX 命令(Linux的常用命令)
2013/07/10 面试题
农民工工资支付承诺函
2014/03/31 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
Python如何将list中的string转换为int
2022/07/15 Ruby