изменить значок узла с помощью fancytree.js - PullRequest
0 голосов
/ 07 января 2019

Я использую fancytree.js для просмотра дерева, и у меня есть обратный вызов для дерева:

$("#tree").fancytree({ 
    source: {url: "/" + appPath + "/pathosadmin?treepages=true"},
    postProcess: function (event, data) {
        data.result = convertData(data.response, true);
    },
    init: function (event, data) {
        var root = $("#tree").fancytree("getRootNode");
        root.sortChildren(function (a, b) {
            return treeSort(a, b);
        }, true);
    },
    icon: function (event, data) {

        switch (data.node.data.NODE_TYPE) {
            case 1: //page
                if (data.node.data.STARTPAGE == 0) {
                    return "fancytree_page_icon";
                } else if (data.node.data.STARTPAGE == 1) {
                    _this.startPageNode = data.node;
                    return "fancytree_startpage_icon";
                }
            case 2: //group
                return "fancytree_group_icon";
            case 3: //level
                if (data.node.data.LEVELID) {
                    switch (data.node.data.LEVELID) {
                        case 1:
                            return "fancytree_level_1_icon";
                        case 2:
                            return "fancytree_level_2_icon";
                        case 3:
                            return "fancytree_level_3_icon";
                        case 4:
                            return "fancytree_level_4_icon";
                        case 5:
                            return "fancytree_level_5_icon";
                    }
                } else {
                    return "fancytree_location_icon";
                }
        }
    },
    extensions:

Теперь я хочу также изменить значки во время выполнения. Печально

if (_this.startPageNode) {
     _this.startPageNode.icon = "fancytree_page_icon";
     _this.startPageNode.renderTitle();
 }
 activeNode.icon = "fancytree_startpage_icon";
 activeNode.render();
 _this.startPageNode = activeNode;

не работает. Любые советы о том, как решить эту проблему. Атрибут node.icon всегда неопределен и даже если я его установил (+ рендеринг узла), он не отображается.

1 Ответ

0 голосов
/ 29 июля 2019

renderTitle () вызывает функцию icon, так что я нашел способ динамически менять иконку - это поместить некоторый атрибут в узел

activeNode.state = 'clicked';
activeNode.renderTitle();

и затем добавьте дополнительную обработку входа в функцию значков на дереве:

var state = data.node.state;
if (state) {
    switch (state) {
        case "clicked": return "glyphicon glyphicon-ban-circle"
            return;
        case "completed": return "glyphicon glyphicon-ok-circle"
            return;
        case "removed": return "glyphicon glyphicon-remove-circle"
            return;
        default:
            return "glyphicon glyphicon-remove-circle"
            break;
    }
}
...