Подтвердить что ты не робот

Как я могу подавить каскад при начальной загрузке jsTree?

Я использую jsTree с плагином checkbox. У меня установлен каскад "вниз". Это отлично работает, за исключением того, что когда я хочу загрузить данные со смесью проверенных и непроверенных узлов, каскад переопределяет настройку "состояние" для узлов. Например.

var data = [
    {"id":"p90","parent":"#","text":"Page1", "state": { "selected": true} },
    {"id":"p100","parent":"p90","text":"Page2", "state": { "selected": true} },
    {"id":"p101","parent":"p100","text":"Page3", "state": { "selected": false} },
    {"id":"p102","parent":"p101","text":"Page4", "state": { "selected": true} },
    {"id":"p103","parent":"p101","text":"Page5", "state": { "selected": false} }
];

$(function () {
    $("#PageTree")
        .jstree({
            core: { data: data },
            plugins: ["checkbox"],
            checkbox: { cascade: "down", three_state: false },
            expand_selected_onload: true
        });
});

В результате получается следующее:

all checked

Но это должно выглядеть так:

some checked

Я попытался установить параметр "каскад" после загрузки дерева, но это не сработало. Кажется, единственный вариант - написать собственный каскадный код, но я ищу опцию slicker.

4b9b3361

Ответ 1

Это то, что я закончил, это решение, рекомендованное разработчиком jsTree (https://github.com/vakata/jstree/issues/774):

$("#PageTree")
    .on('select_node.jstree', function (e, data) {
        if (data.event) {
            data.instance.select_node(data.node.children_d);
        }
    })
    .on('deselect_node.jstree', function (e, data) {
        if (data.event) {
            data.instance.deselect_node(data.node.children_d);
        }
    })
    .jstree({
        core: { data: pages },
        plugins: ["checkbox"],
        checkbox: { cascade: "", three_state: false },
        expand_selected_onload: true
    });