Я использую jsTree для создания индекса списка документации. Я использую JSON для создания своего дерева. У меня проблема и вопрос.

Моя проблема в том, что один и тот же значок (значок по умолчанию установлен в типах) отображается как для папок, так и для файлов. Когда я меняю значок по умолчанию, все значки дерева устанавливаются на этот значок. Если я не использую подключаемый модуль типов, для всех значков используется значок папки по умолчанию.

Конфигурация jstree:

$("#agac_tutacagi").jstree({
    "plugins" : [ "themes", "json_data", "types", "ui"],

    "core":{
        "animation":500,
        "strings":{
            "loading":"Yükleniyor"
        }
    },

    "types":{
        "types":{
            "max_children" : -2,
            "max_depth" : -2,

            "folder" : {
                "valid_children" : [ "default", "dizin", "dosya" ],
                "icon" : {
                    "image" : "/static/p/js/jsTree/_demo/folder.png"
                }
            },
            "file" : {
                "valid_children" : "none",
                "icon" : {
                    "image" : "/static/p/js/jsTree/_demo/file.png"
                }
            },
            "default" : {
                "icon" : {
                    "image" : "/static/p/js/jsTree/_demo/file.png"
                }
            }
        }
    },

    "json_data" : {
        "ajax" : {
            "url" : "/dokumantasyon/dokumanAgaciOgesiAl/"
        }
    }
});

Пример JSON:

[{
  "data": {
    "icon": "folder",
    "title": "Sıkça Sorulan Sorular"
  },
  "children": [{
    "data": {
      "icon": "file",
      "attr": {
        "onclick": "dokuman_getir(4)"
      },
      "title": "Program makbuz basmadı"
    }
  }]
}]

Значок устанавливается в словаре данных, как показано в документации sjtree. Но это бесполезно. Ошибки нет, все нормально, кроме значка дерева.

Мой второй вопрос: как я могу настроить jstree, чтобы, когда я нажимаю родительский узел (папку), он расширяется, как если бы щелкнула стрелка раскрытия.

5
FallenAngel 6 Июл 2010 в 19:28

2 ответа

Лучший ответ

Данные вашего ответа должны выглядеть так:

[{"attr":{"id":"node_2","rel":"folder"},"data":"root","state":"closed"}]

Это массив с одним узлом, но вы можете вернуть несколько в массиве, чтобы создать несколько узлов.

"state":"closed" - это ключ, который указывает jsTree запрашивать дочерние узлы с вашего сервера при нажатии / раскрытии.

"rel" : "folder" указывает jsTree использовать тип папки, определенный в узле "types", который у вас был выше. Затем используется значок, указанный для типа "folder".

7
hoang 31 Янв 2013 в 13:48

Чтобы создать поведение щелчка для раскрытия, вы можете использовать плагин типов, чтобы переопределить поведение щелчка по умолчанию:

"types":{
    "types":{
        "max_children" : -2,
        "max_depth" : -2,
        "default" : {
            "valid_children" : [ "default"],            
            "select_node" : function (e) {
                this.toggle_node(e);
                return false;
            }
        },
        ...
    "plugins" : [ "themes", "html_data", "ui","types" ]
6
GrayB 27 Дек 2011 в 20:16