四两拨千斤——Dijit Tree 拖拽(DnD, Drag & Drop)的精细控制

本文详细介绍了如何使用dijit.Tree控件实现Dojo中的拖拽(DnD)功能,特别是在拖动和放置节点时进行精细控制。内容包括禁止拖动特定节点、设定拖拽目标位置、改变节点属性、处理节点颜色变化、拖拽父节点及其孩子、滚动控制等。通过自定义TreeDndSource和TreeDndTarget,实现了拖拽过程中的各种定制需求。
摘要由CSDN通过智能技术生成

介绍

dijit.Tree是一款很有用的Dojo控件,用来在页面上表示树形数据。像Dojo其他很多控件一样,它可以直接和后台的数据连接,并实时显示在页面上。已经有很多帖子介绍如何创建树、加入点击事件及右键菜单等,这儿专门介绍dijit.Tree拖拽的精细控制(Dojo 1.7.3)。

 

先说说举例用的应用场景。一个食品原材料供应商要建立自己的产品列表(New List),该列表包含几个大类,大类下面又有小类,直至具体的产品。现在要做的就是,请一个专业人员,根据一个别的渠道来的列表(Old List),建立自己的产品列表。

根据需求,这两个列表(dijit.tree)要实现的最重要的功能就是支持拖拽(Drag & drop):从左边的列表拖动节点到右边的列表。为了达到目标,还需要进行诸多精细控制,列举如下:

1.        dijit.Tree上拖拽节点

  1. 在左边的树上,禁止拖动根节点、已经被拖拽到右边的节点;
  2. 设定拖拽的目标位置;
  3. 改变拖拽后的节点属性,比如这两棵树都是以”id”作为标识符,则拖拽后要保证节点的id和原来树上的节点但不冲突;
  4. 将拖拽后原来节点的颜色变成灰色,表示已经从这棵树上删除;
  5. 当选中的是父亲节点时,同时拖拽其孩子;
  6. 拖拽后,只在目标树上保留不是灰色的节点;
  7. 禁止拖拽节点到某个目标位置。

2.        滚动(Scrolling)

  1. 禁止有垂直滚动条时,用鼠标点滚动条触发拖拽。

要实现上面这么多控制,首先要了解dijit.Tree拖拽的主要控制部件。那就是"dijit/tree/dndSource"。它实现了很多接口,在拖拽生命周期的不同阶段产生相应的作用。这儿就通过继承和修改相应接口,实现我们要的功能。


创建两棵树

test_tree.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
@import "../js/dijit/themes/tundra/tundra.css";
@import "../css/main.css";
</style>

</head>
<body class="tundra">
<div style="width: 100%; height: 100%"
	data-dojo-type="dijit.layout.BorderContainer"
	data-dojo-props="design:'sidebar', gutters:true, liveSplitters:true">
	<div data-dojo-type="dojox.layout.ContentPane" data-dojo-props="region:'left',splitter:true" style=&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值