【发布时间】:2014-04-23 11:48:45
【问题描述】:
我有一个拖放树:
第一个图像是一个拖动节点图像。我将“家具”父节点拖到“存储”父节点内。这成功拖动(见第二张图片)。
我不想让这种情况发生。如何预防?
谢谢。
【问题讨论】:
标签: asp.net-mvc drag-and-drop kendo-ui kendo-treeview
我有一个拖放树:
第一个图像是一个拖动节点图像。我将“家具”父节点拖到“存储”父节点内。这成功拖动(见第二张图片)。
我不想让这种情况发生。如何预防?
谢谢。
【问题讨论】:
标签: asp.net-mvc drag-and-drop kendo-ui kendo-treeview
好的,你想要的是不允许在不同的 TreeView 之间拖放,同时允许在 TreeView 中拖放?
如果我没有错,解决方案是在 drop 事件处理程序中检查您的 destinationNode 是否是当前树视图的子级。如果不是,则将 drop 设置为无效。
这里有一个解决方案:
$("#treeview-left").kendoTreeView({
dragAndDrop: true,
dataSource: [/*..*/],
drop: function (ev) {
var tree = $(this.root.context).data('kendoTreeView');
var dst = tree.dataItem(ev.destinationNode);
if (typeof dst === 'undefined') {
ev.setValid(false);
}
}
}
});
【讨论】:
您需要处理树视图的dragstart 事件并调用e.preventDefault()。下面是防止拖拽根节点的方法:
$("#treeview").kendoTreeView({
dragAndDrop: true,
dataSource: [
{ text: "foo", items: [
{ text: "bar" }
] }
],
dragstart: function(e) {
if ($(e.sourceNode).parentsUntil(".k-treeview", ".k-item").length == 0) {
e.preventDefault();
}
}
});
【讨论】:
我找到了父级非 dnd 到其他父级内部的解决方案。
首先获取节点。
sourceNode = this.dataItem(e.sourceNode);
然后检查它是否是父节点然后不允许在父节点内进行 dnd 否则 dnd 允许
if(item && !sourceNode.parentNode()){
sourceNode = this.dataItem(e.sourceNode);
}
看这个例子here
【讨论】:
如果您不想拖动任何父节点我找到并使用的这段代码(来自 Telerik 论坛)
$(".k-treeview").data("kendoTreeView").bind("dragstart", function (e) {
if ($(e.sourceNode).parentsUntil(".k-treeview", ".k-item").length == 0) {
e.preventDefault();
}
});
【讨论】: