3

我已经阅读了花式树的文档和示例几个小时,像海绵一样吸收了花式树的所有优点,但我似乎无法弄清楚如何使用 API 调用首先使用文件夹对我的花式树对象进行排序。我最初通过安排我的初始 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);

提前致谢!

4

2 回答 2

8

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

于 2014-03-25T15:15:51.187 回答
0

试试下面的代码:

var cmp=函数(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);
于 2018-02-16T11:50:37.340 回答