使用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 相关文章推荐
IE6下出现JavaScript未结束的字符串常量错误的解决方法
Nov 21 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
Oct 27 Javascript
Kibo 用于处理键盘事件的Javascript工具库
Oct 28 Javascript
DIV+CSS+JS不间断横向滚动实现代码
Mar 19 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
Aug 02 Javascript
AngularJS利用Controller完成URL跳转
Aug 09 Javascript
ligerUI---ListBox(列表框可移动的实例)
Nov 28 Javascript
实现jquery放大镜的两种方法
Feb 22 jQuery
从零开始学习搭建React脚手架项目
Aug 23 Javascript
详解如何用VUE写一个多用模态框组件模版
Sep 27 Javascript
详解VUE单页应用骨架屏方案
Jan 17 Javascript
Vue实现input宽度随文字长度自适应操作
Jul 29 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
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
javascript精确统计网站访问量实例代码
2015/12/19 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
jquery实现(textarea)placeholder自动换行
2016/12/22 Javascript
AngularJS实现使用路由切换视图的方法
2017/01/24 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
解决一个微信号同时支持多个环境网页授权问题
2019/08/07 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
2019/09/10 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
vue addRoutes路由动态加载操作
2020/08/04 Javascript
python getopt 参数处理小示例
2009/06/09 Python
python实现中文输出的两种方法
2015/05/09 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
印度网上药店:1mg
2017/10/13 全球购物
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
汉语专业应届生求职信
2013/10/01 职场文书
业务员岗位职责范本
2013/12/15 职场文书
中秋节作文(五年级)之关于月亮
2019/09/11 职场文书
浅谈Redis在直播场景的实践方案
2021/04/27 Redis
JavaScript文档对象模型DOM
2021/11/20 Javascript