【问题标题】:Don't allow parent tree inside a another parent tree to be dragged - kendo drag and drop treeview不允许拖动另一个父树中的父树 - 剑道拖放树视图
【发布时间】:2014-04-23 11:48:45
【问题描述】:

我有一个拖放树:

第一个图像是一个拖动节点图像。我将“家具”父节点拖到“存储”父节点内。这成功拖动(见第二张图片)。

我不想让这种情况发生。如何预防?

谢谢。

【问题讨论】:

    标签: asp.net-mvc drag-and-drop kendo-ui kendo-treeview


    【解决方案1】:

    好的,你想要的是不允许在不同的 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);
                       }
                  }
      }
    });
    

    【讨论】:

    • 你好 dievardump 我想不允许将父节点拖放到其他父节点内。
    • 好的,所以这里我们有 3 个父节点。家具,存储,装饰。是否可以将孩子从家具送到储藏室?是否可以将子项从 Furniture 转换为新的 parentNode?​​span>
    • 是的子节点允许 dnd 到一个父节点到另一个父节点,但我想不允许将父节点拖放到另一个父节点内。
    • 所以听dragStart,如果它是一个parentNode,则使dnd无效。
    • 看看它是否是一个父节点,然后不要 dnd,但我不想在父节点内有父节点,但我想在父节点之外做父节点,那又如何?
    【解决方案2】:

    您需要处理树视图的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();
        }
      }
    });
    

    【讨论】:

    • 你好,我在我的 kendotreeview 代码中添加了 dragstart 事件。但现在不允许父节点拖放。它只允许子节点 dnd。
    【解决方案3】:

    我找到了父级非 dnd 到其他父级内部的解决方案。

    首先获取节点。

    sourceNode = this.dataItem(e.sourceNode);
    

    然后检查它是否是父节点然后不允许在父节点内进行 dnd 否则 dnd 允许

    if(item && !sourceNode.parentNode()){
    sourceNode = this.dataItem(e.sourceNode);
    }
    

    看这个例子here

    【讨论】:

      【解决方案4】:

      如果您不想拖动任何父节点我找到并使用的这段代码(来自 Telerik 论坛)

      $(".k-treeview").data("kendoTreeView").bind("dragstart", function (e) {
          if ($(e.sourceNode).parentsUntil(".k-treeview", ".k-item").length == 0) {
             e.preventDefault();
          }
      });
      

      【讨论】:

      • 实际上我粘贴的代码不允许您更改任何父级的排序顺序,因此它适用于特定的业务用例。
      猜你喜欢
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多