【问题标题】:How to sort fancytree nodes with folders at the top如何对顶部有文件夹的fancytree节点进行排序
【发布时间】:2018-02-16 19:50:37
【问题描述】:

我已经查看了 fancytree 的文档和示例几个小时,像海绵一样吸收了 fancytree 的所有优点,但我似乎不知道如何使用 API 调用首先使用文件夹对我的 fancytree 对象进行排序。我最初通过安排我的初始 JSON 数据解决了这个问题,以便它已经在顶部的文件夹中排序(项目的要求)但现在我需要向树中添加一个新文件夹并且我需要重新排序确保新添加的文件夹与其他文件夹一起出现在树顶部的对象。

我注意到 sortChildren() 有一个奇怪的选项,它允许定义自定义比较函数,但我在思考如何使用它时遇到了麻烦。

任何想法都将不胜感激!

下面是关于我目前如何做事的片段(我正在用来自某些表单元素的数据填充新的孩子):

//add the new foldername to the tree and re-order
var rootNode = jQuery("#document_objects").fancytree("getRootNode");
var childNode = rootNode.addChildren({
    title:    jQuery('#newfoldername').val(),
    tooltip:  jQuery('#description').val(),
    folder:   true
});

rootNode.sortChildren(null, true);

提前致谢!

【问题讨论】:

    标签: fancytree


    【解决方案1】:

    sortChildren(cmp, deep) 允许传递比较函数: http://www.wwwendt.de/tech/fancytree/doc/jsdoc/FancytreeNode.html#sortChildren

    默认实现(如果您为 cmp 参数传递 null 或不传递任何内容)是
    function(a, b) { var x = a.title.toLowerCase(), y = b.title.toLowerCase(); return x === y ? 0 : x > y ? 1 : -1; };

    但您可以添加一些前缀来强制执行不同的顺序,例如:
    function(a, b) { var x = (a.isFolder() ? "0" : "1") + a.title.toLowerCase(), y = (b.isFolder() ? "0" : "1") + b.title.toLowerCase(); return x === y ? 0 : x > y ? 1 : -1; };

    【讨论】:

      【解决方案2】:

      试试下面的代码:

      var cmp= function(a, b) {

      var x = (a.data.isFolder ? "0" : "1") + a.data.title.toLowerCase(),                    
      y = (b.data.isFolder ? "0" : "1") + b.data.title.toLowerCase();                 
      return x === y ? 0 : x > y ? 1 : -1;
              };
      
      node.sortChildren(cmp, true);
      

      【讨论】:

        猜你喜欢
        • 2017-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-21
        • 2018-11-28
        • 1970-01-01
        • 1970-01-01
        • 2013-02-10
        相关资源
        最近更新 更多