Как я могу подавить каскад при начальной загрузке 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.
Ответы
Ответ 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
});