使用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
Aug 13 Javascript
JavaScript实现继承的4种方法总结
Oct 16 Javascript
在 Angular中 使用 Lodash 的方法
Feb 11 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
Jun 20 Javascript
React 实现拖拽功能的示例代码
Jan 06 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
Aug 02 Javascript
layui中select,radio设置不生效的解决方法
Sep 05 Javascript
javascript移动端 电子书 翻页效果实现代码
Sep 07 Javascript
解决vue v-for src 图片路径问题 404
Nov 12 Javascript
JS常用排序方法实例代码解析
Mar 03 Javascript
js对象属性名驼峰式转下划线的实例代码
Sep 17 Javascript
JavaScript实现瀑布流布局的3种方式
Dec 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中使用register_shutdown_function函数截获fatal error示例
2015/04/21 PHP
PHP 二级子目录(后台目录)设置二级域名
2017/03/02 PHP
javascript 常用关键字列表集合
2007/12/04 Javascript
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
jquery div 居中技巧应用介绍
2012/11/24 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
jquery中trigger()无法触发hover事件的解决方法
2015/05/07 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
详解创建自定义的Angular Schematics
2018/06/06 Javascript
解决iview多表头动态更改列元素发生的错误的方法
2018/11/02 Javascript
electron 安装,调试,打包的具体使用
2019/11/06 Javascript
vue3+typeScript穿梭框的实现示例
2020/12/29 Vue.js
js数组的基本使用总结
2021/01/18 Javascript
Python入门篇之列表和元组
2014/10/17 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
python实现将excel文件转化成CSV格式
2018/03/22 Python
python使用PIL给图片添加文字生成海报示例
2018/08/17 Python
Python实现多进程的四种方式
2019/02/22 Python
django从后台返回html代码的实例
2020/03/11 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
Python字符串及文本模式方法详解
2020/09/10 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
档案保密承诺书
2014/06/03 职场文书
先进典型事迹材料
2014/12/29 职场文书
秦兵马俑导游词
2015/02/02 职场文书
奖学金个人总结
2015/03/04 职场文书
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android
TypeScript实用技巧 Nominal Typing名义类型详解
2022/09/23 Javascript