如何使用顶部的文件夹对fancytree节点进行排序

时间:2014-03-22 18:24:15

标签: fancytree

我已经回顾了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);

提前致谢!

2 个答案:

答案 0 :(得分:5)

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

默认实现(如果您传递 null cmp 参数没有任何内容)是
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; };

答案 1 :(得分:0)

尝试以下代码:

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);