按标题对整个 fancytree 进行排序失败

Sorting whole fancytree by title fails

我的页面上有一个 js 代码,它从具有单独负载的服务器获取 JSON-hierarchy,并在页面上构建一个可视化的 Fancytree 层次结构(我从示例中删除了 html 页面部分)。

  $(function() {
    $("#tree").fancytree({
      source: {
        url: '/products/ftree/?format=json',
        cache: false,
        datatype: 'json',
      },
      checkbox: false,
    })

    sortProducts();
    console.log('sorted');
  });

  function sortProducts(){
    console.log('in sortProducts()');
    var tree = $("#tree").fancytree("getTree");
    tree.rootNode.sortChildren(null, true);
    tree.visit( function(node) {
      node.sortChildren(null, false);
      return true;
    });
    tree.render(true, true);
    console.log('end of sort func');
  }
 .
 .
 .
 <div id='tree' ></div>

每个节点都有像

这样的标题
   1 Fooo
   2 Bar
   3 FoooBar
   3-1 BarFooo
   3-1-1 foofoofoo
   3-1-2 barbarbar
   4 Buuu
   4-1 BuuuBooo
   4-1-1 bubobubub

等等。页面加载正常,它正确地呈现树并且大多数节点的顺序正确,但在较深的部分 4-2 出现在 4-1 之前,依此类推。所以我试着用 .sortChildren(null, true) 等等对它们进行排序,但它没有对它们进行排序。我整理了代码,它不会给出任何错误,并且可以很好地打印调试,但是树没有正确排序。

请注意,代码片段有两次尝试,通过 rootNodenode traverse,我单独和一起尝试过并得到相同的部分未排序的树。在我的理解中,sortChildren() 应该在不覆盖默认 cmp 函数的情况下对 title-strings 进行排序。

知道这有什么问题吗?

这段代码可以

var node = $("#tree").fancytree("getRootNode");
node.sortChildren(null, true);

但问题是你试图对空树进行排序,因为异步请求还没有返回。
一种解决方案是在 init 事件中调用它:

$("#tree").fancytree({
    ...
    init: function(event, data) {
      data.tree.getRootNode().sortChildren(null, true);
    },
    ...