使用Ext JS技术拖动树结点

简介:

本文为原创,如需转载,请注明作者和出处,谢谢!

    在本文将介绍TreePanel组件非常有意思的一个功能:结点拖放。要使TreePanel组件的结点可以拖放非常简单,只需要将TreePanel类的enableDD选项参数设为true即可。当然,要想实现更复杂的功能,还需要配合其他的参数和事件。

一、结点拖放的位置

拖放结点包含了两个动作,拖(drag)和放(drop)。拖很好理解,就是将结点拖起来,拖哪一个结点的效果都是一样的。不过放结点就比较复杂了。放结点可分为如下两种情况:

  •  追加(append)结点:如果将拖动的结点正好放在非叶子结点的上面,TreePanel组件会将这个结点移动到非叶子结点下面作为该结点的子结点。由于TreePanel的限制,叶子结点不能append
  • 在同一层做上下移动(abovebelow): 如果将拖动的结点放在叶子结点上,或放在非叶子结点的侧面,会将拖动结点作为兄弟结点来放置。

    下面的设置将TreePanel组件设为结点可拖动状态。

    在浏览器地址栏中输入如下的 URL
    http://localhost:8080/netdisk/tree/drapdrop.html
    当显示出树形结点时,按上面的拖动方法来拖动结点,会出现如图
1 、图 2 和图 3 所示的拖动效果。

        图1
  【英语】结点将作为【计算机】的子结点

图2  【英语】结点将作为【计算机】的兄弟结点,并移到【计算机】结点的前面(above拖放

            图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所示。


                图4  使叶子结点可以append

除此之外,树结点还有其他的拖动方式,内容请见《人人都玩开心网:Ext JS+Android+SSH整合开发Web与移动SNS》 一书的相关章节。

本文转自银河使者博客园博客,原文链接http://www.cnblogs.com/nokiaguy/archive/2010/08/04/1791865.html如需转载请自行联系原作者


银河使者

相关文章
|
3月前
|
前端开发 JavaScript 测试技术
深入 JavaScript:理论和技术(下)
深入 JavaScript:理论和技术(下)
40 0
|
3月前
|
存储 JavaScript 前端开发
深入 JavaScript:理论和技术(上)
深入 JavaScript:理论和技术(上)
30 0
|
3月前
|
数据可视化 前端开发 JavaScript
数据可视化技术的较量:D3.js与Tableau的比较与选择
在当今信息爆炸的时代,数据可视化成为了帮助我们理解和传达数据的重要工具。本文将重点对比并评估两个主流的数据可视化技术和工具,即D3.js和Tableau。我们将探讨它们的优势、适用场景以及选择的关键因素,以帮助读者在选择合适的数据可视化工具时做出明智的决策。
|
3月前
|
JavaScript
Vue3 + Js 指定位置进行拖动
Vue3 + Js 指定位置进行拖动
|
1天前
|
JavaScript 前端开发 UED
深入解析JavaScript原生操作DOM技术
【4月更文挑战第22天】本文深入探讨JavaScript原生DOM操作技术,包括使用`getElement*`方法和CSS选择器获取元素,借助`createElement`与`appendChild`动态创建及插入元素,修改元素内容、属性和样式,以及删除元素。通过掌握这些技术,开发者能实现页面动态交互,但应注意避免过度操作DOM以优化性能和用户体验。
|
1月前
|
JavaScript 前端开发 安全
关于 JavaScript 代码的反混淆技术
关于 JavaScript 代码的反混淆技术
64 0
|
1月前
|
Rust 前端开发 JavaScript
前端技术的未来:WebAssembly与JavaScript的融合之路
【2月更文挑战第12天】本文旨在探讨WebAssembly(以下简称Wasm)与JavaScript(以下简称JS)的结合如何为前端开发带来革命性变化。传统上,JS一直是前端开发的核心,但随着Wasm的出现,我们看到了前端性能和功能的新天地。文章首先介绍Wasm的基本概念,然后分析其对前端开发的影响,包括性能提升、新功能实现以及开发模式的变化。最后,探讨了Wasm与JS融合的未来趋势,以及这种融合如何推动前端技术的进步。
|
1月前
|
Rust 前端开发 JavaScript
探索前端技术的未来:WebAssembly与JavaScript的融合之路
【2月更文挑战第12天】 随着Web技术的不断进步,前端开发正迎来一场革命性变革。本文将深入探讨WebAssembly(以下简称Wasm)与JavaScript(以下简称JS)的结合如何为前端开发带来前所未有的性能提升与新的编程模式。我们将从两者的基本概念入手,探索它们各自的优势与局限,然后深入分析Wasm和JS协同工作时能够解锁的潜力,最后展望这一技术趋势如何塑造未来的前端开发生态。本文旨在为前端开发者提供洞见,帮助他们理解并准备好迎接这一即将到来的技术浪潮。
|
1月前
|
Rust 前端开发 JavaScript
前端技术的未来演进:WebAssembly与JavaScript的深度融合
【2月更文挑战第11天】 在数字化时代,前端技术的迅速发展不仅推动了用户体验的革新,也促进了Web应用的性能提升。本文将探讨WebAssembly(以下简称Wasm)与JavaScript(以下简称JS)之间的深度融合如何成为前端技术发展的关键转折点。不同于传统的技术文章摘要,我们将通过一种叙事式的预览引导读者进入这一技术领域的探索之旅,揭示Wasm和JS结合后为前端开发带来的无限可能性和挑战。
|
2月前
|
前端开发 JavaScript API
JavaScript中的异步编程技术及应用
【2月更文挑战第2天】传统的JavaScript编程方式在处理异步操作时存在诸多不足,为了解决这一问题,近年来涌现出了一系列异步编程技术,本文将深入探讨Promise、async/await等异步编程解决方案,并结合实际案例展示其在前端开发中的应用。