如何在jsTree的初始加载时抑制级联?

时间:2014-12-17 19:48:10

标签: jstree

我正在使用带有复选框插件的jsTree。我将级联设置为" down"。这很好用,除了当我想加载已检查和未检查节点的混合数据时,级联会覆盖"状态"设置节点。 E.g。

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

我尝试设置"级联"加载树后设置,但这不起作用。似乎唯一的选择是编写我自己的级联代码,但我正在寻找一个更光滑的选项。

1 个答案:

答案 0 :(得分:15)

这就是我最终要做的,这是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
    });