【问题标题】:fancytree - sortable getting the order of nodes, sorting in same nest level only花式树 - 可排序获取节点的顺序,仅在相同的嵌套级别排序
【发布时间】:2018-10-09 16:56:09
【问题描述】:

我正在使用带有可排序扩展的 fancytree,我发现了 2 个问题,我正在努力解决几个小时。也许有人可以帮助我。 目标是能够在同一嵌套级别的元素之间进行排序,但现在我只能对根节点进行排序。 第二个想法更重要,我不知道为什么会这样。当我试图获取花式树节点时(当然我想以当前的排序顺序获取它们),我总是得到相同的顺序而不依赖于视图显示。 我正在使用这些事件来获取节点:$('#tree').fancytree("getTree").toDict()

html:

<div id="tree"></div>

Javascript:

$(function() { // on page load
  $("#tree").fancytree({
    debugLevel: 0,
    selectMode: 1,
    extensions: ["dnd"],
    source: [{
        title: "Node 1",
        key: "1",
        "baloney": 44
      },
      {
        title: "Node 2",
        key: "2432"
      },
      {
        title: "Folder 2",
        key: "2",
        folder: true,
        children: [{
            title: "Node 2.1",
            key: "3",
            myOwnAttr: "abc"
          },
          {
            title: "Node 2.2",
            key: "4"
          },
                    {
            title: "Node 2.3",
            key: "5"
          },          {
            title: "Node 2.4",
            key: "6"
          },          {
            title: "Node 2.5",
            key: "7"
          }
        ]
      }
    ],
dnd5: {
                    preventForeignNodes: true,
                    preventRecursiveMoves: true, // Prevent dropping nodes on own descendants
                    preventVoidMoves: true, // Prevent dropping nodes 'before self', etc.
                    dragStart: function(node, data) {

                        return true;
                    },
                    dragEnter: function(node, data) {

                        return true;
                    },
                    dragDrop: function(node, data) {
                        data.otherNode.moveTo(node, data.hitMode);
                    },
                    activate: function(event, data) {
                    },
                    draggable: {
                        appendTo: "body",
                        connectToSortable: '#tree > ul',
                        containment: "parent",
                        revert: "invalid"
                    }
                },
  });

  $('#tree > ul').sortable({
    connectWith:"#fancytree",
    out: function(event, ui) {
      if (event.originalEvent.type === "mousemove") {
        $(ui.item).data('drugout', true);
      }
    }
  });

});

这里是小提琴链接:Link

【问题讨论】:

    标签: javascript jquery treeview jquery-ui-sortable fancytree


    【解决方案1】:

    您还需要将可排序添加到子节点。将以下代码添加到 fancytree 初始化。该函数主要观察子节点展开,然后为子节点激活可排序。

    expand: function() {
        $('.fancytree-has-children').siblings().sortable();
    },
    

    我也更新了 jsfiddle。查看链接:https://jsfiddle.net/3zmLfe1h/11/

    回答您的第二个问题:我不确定,但我想可能 fancytree 正在以某种方式保存订单并在您尝试获取订单时将其退回给您。不过,您可以使用 jQuery 和 Sortable 获取所有值。

    【讨论】:

    • 感谢您的回答,我更新了我的代码,现在排序工作正常。我仍然对使用 Sortable 或 jQuery 获取这些值感到困惑,因为我的示例要复杂得多,而且我不仅对它进行了一次排序,而且我希望在用户再次打开此树时对其进行排序。无论如何,感谢您的帮助
    • @Piotr fancytree 不允许您永久排列树元素。如果你想要一个可排序和可重新排列的结构,我建议你使用bootstrap 来对齐元素,然后对它们使用可排序的。我已经完成并且有效。
    • 你有在引导程序上完成工作“树视图”的原型吗?如果你有我会很高兴
    • 没有工作原型。但这是可以完成的。尝试使用引导程序渲染树结构。
    • 好的,我试试。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    相关资源
    最近更新 更多