[英]Flex tree control drag drop .item position
只是面临树控制拖放困难。
假设我有启用了拖放功能的树。 我想将哪个node(id)放到哪个节点内。
1]如果我将“ Cat1”节点拖到“ Cat3”内,我想标识“ cat1”和“ cat3”的同级ID。
2]总的来说,我想知道当前元素的ID与
它的新父代和新职位,并保存这些职位。
3]同样,当移到“ cat3”之外时,“ cat4”也想知道它的位置及其同级ID。
<mx:XML id="treeDP">
<node label="Categories">
<node label="Cat1" id="1" isBranch="true"/>
<node label="Cat2" id="2" isBranch="true"/>
<node label="Cat3" id="3" isBranch="true">
<node label="Cat4" id="4" isBranch="true"/>
</node>
</node>
</mx:XML>
<mx:Tree id="compBalanced"
width="420" height="439"
dataProvider="{treeDP}"
showRoot="false"
labelField="@label"
doubleClickEnabled="true"
dragEnabled="true"
dropEnabled="true"
dragDrop="onDragDrop(event)"
/>
当我不得不检查接收孩子的节点时,我遇到了这样的问题。 为了使节点成为父节点,我使用了:
public function getObjectTarget() : Object {
var dropData : Object = tree.mx_internal::_dropData as Object;
if (dropData.parent != null) {
return dropData.parent;
} else {
// if there is not parent (root of the tree), I take the root directly
var renderer : IListItemRenderer = tree.indexToItemRenderer(0);
return renderer.data;
}
希望这会帮助一些人
通过听树上的dragComplete暂时解决了问题
dragComplete =“ handleDragComplete(event)
当拖动完成后,我从树中获取更改的dataprovider,然后在更改后的dataprovider中递归搜索“拖放项”(“ id” +“ label”)以找到其在树中的位置。 所选节点所在的节点(父节点)的“ id”。 并触发保存到数据库api。
任何人都有更好的选择。 请回复
谢谢 :)
DragEvent包含dragSource元素。 它包含要拖动的元素。 如果是树,则其类型为“ treeItems”。 var items:Array = event.dragSource.datForFormat("treeItems") as Array;
拖动树节点时,只有一个元素,即items[0]
可以很容易地位于(更改的)树内部。
但是,似乎没有办法揭示如果在当前拖动位置释放该项目, 将在何处插入该项目(例如,防止将节点拖动到某个位置)。 “ calculateDropIndex()”函数仅计算放置节点的虚拟矩阵中的行(但不计算列/缩进)。 这纯粹取决于y坐标,并且可以是远远大于节点总数的索引,而例如在最后一个节点之后的行中,相同的索引可能会将元素作为最后一个子节点的子元素删除,与最后一个子节点或与根节点平行的子节点。 我还没有找到一种简单的方法(除了在Tree dragDrop处理程序中复制代码)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.