telerik kendo treeview - 防止在父级之外拖动

时间:2012-12-04 20:45:37

标签: drag-and-drop telerik treeview kendo-ui

我正试图阻止父节点(“LLCA”)之外的节点的拖放而没有运气。

有什么建议吗?

Image of Treeview

我最终使用下面的代码让它工作:

function onDrop(e) {
    var dst = e.destinationNode;
    var first = $('.k-item:first');
    var pos = e.dropPosition;
    if (dst && dst.uid === first.uid && pos !== "over") {
        e.setValid(false);
    }
}

2 个答案:

答案 0 :(得分:3)

让我们定义treeview

var tree = $("#tree").kendoTreeView({
    dataSource :content,
    dragAndDrop:true
}).data("kendoTreeView");

我要做的是添加drop回调,我将控制它:

  1. 我们不会掉到树外
  2. 我们没有在树的第一个节点之前或之后删除
  3. 树的定义是:

    var tree = $("#tree").kendoTreeView({
        dataSource :content,
        dragAndDrop:true,
        drop       :function (ev) {
            var dst = tree.dataItem(ev.destinationNode);
            var first = tree.dataItem(".k-item:first");
            var pos = ev.dropPosition;
            if (dst && dst.uid === first.uid && pos !== "over") {
                console.log("invalid");
                ev.setValid(false);
            }
        }
    }).data("kendoTreeView");
    

    查看http://docs.kendoui.com/api/web/treeview#drop以获取有关drop活动的信息。

答案 1 :(得分:2)

因为我无法对答案发表评论,所以我会写自己的答案。

用户Mithrilhall询问MVC包装器,最顶层的答案只能阻止移动到根节点。

我将尝试回答两个Mithrilhall并提供一个示例,您只能在其父级的上下文中移动子级。换句话说,只允许任何父母的子女在父母中改变他们的顺序。

首先,对于MithrilHall来说,这就是你如何看待MVC中的事件。

MATCH(title) AGAINST('+cat hat' IN BOOLEAN MODE) 

树视图中还有其他活动,你可以为自己带来一个雄鸟。参数是javascript函数的名称。以下是此MVC包装器的示例javascript函数,以防止子进程移出其父级,但允许子进程仍在父级内移动。

@(Html.Kendo().TreeView()
            .Name("ourTreeView")
            .Events(e => e.Drop("treeViewDrop"))

我在我的数据源中建模了一个parentID字段。你可以通过很多方式实现这一目标。 dataItem方法返回一个kendo树视图项,因此它包含所有建模字段。

同样明白,当您移动到无法放置的位置时,此解决方案不会更改窗口小部件以显示X.这是另一个解决方案的另一个问题。

我希望这有帮助,祝你好运!