javascript - 将 jsTree 节点设置为 "Undetermined"状态

标签 javascript jquery ajax jstree

我正在使用 jsTree显示带有复选框的树。使用 json_data 按需加载每个级别的节点插件。

如果检查了节点的后代,则该节点应处于“未确定状态”(如 ACME 和 USA)。

Checked Descendent in jsTree

问题是,树开始折叠。 ACME长相unchecked应该undetermined .当我最终扩展到一个选中的节点时,jsTree 意识到祖先应该是 undetermined .

Expanding to checked node fixes the problem

所以我需要能够在 undetermined 中放置一个复选框不加载其子项的状态。

jsTree您可以通过添加 jstree-checked 来预先选中一个框类到 <li> .我尝试添加 jstree-undetermined类,但它不起作用。它只是将它们置于检查状态。

这是我的代码:

$("#tree").jstree({
    plugins: ["json_data", "checkbox"],
    json_data: {
        ajax: {
            url: '/api/group/node',
            success: function (groups) {
                var nodes = [];
                for (var i=0; i<groups.length; i++) {
                    var group = groups[i];

                    var cssClass = "";
                    if(group.isSelected)
                        cssClass = "jstree-checked";
                    else if(group.isDecendantSelected)
                        cssClass = "jstree-undetermined";

                    nodes.push({
                        data: group.name,
                        attr: { 'class': cssClass }
                    });
                }
                return nodes;
            }
        }
    }
})

我的问题

如何将节点设置为 undetermined状态?

最佳答案

我遇到了同样的问题,我找到的解决方案是这个:

var tree = $("#tree").jstree({
    plugins: ["json_data", "checkbox"],
    json_data: {
        ajax: {
            url: '/api/group/node',
            success: function(groups) {
                var nodes = [];
                for (var i = 0; i < groups.length; i++) {
                    var group = groups[i];
                    var checkedState = "false";
                    if (group.isSelected)
                        checkedState = "true";
                    else if (group.isDecendantSelected)
                        checkedState = "undetermined";
                    nodes.push({
                        data: group.name,
                        attr: { 'checkedNode': checkedState }
                    });
                }
                return nodes;
            },
            complete: function () {
                $('li[checkedNode="undetermined"]', tree).each(function () {
                    $(this).removeClass('jstree-unchecked').removeClass('jstree-checked').addClass('jstree-undetermined');
                });
                $('li[checkedNode="true"]', tree).each(function () {
                    $(this).removeClass('jstree-unchecked').removeClass('jstree-undetermined').addClass('jstree-checked');
                });
                $('li[checkedNode="false"]', tree).each(function () {
                    $(this).removeClass('jstree-checked').removeClass('jstree-undetermined').addClass('jstree-unchecked');
                });
            }
        }
    }
});

希望对你有帮助!

关于javascript - 将 jsTree 节点设置为 "Undetermined"状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19162186/

相关文章:

javascript - 如何检查 token 过期和注销用户?

javascript - 如何在 Node js 中找到当前周的星期一?

javascript - 为什么这个 JS var 在 AJAX 之后就失去了值(value)?

ruby-on-rails - Rails : Pass Params Through Ajax

jquery - 如何将背景颜色更改为 <DIV/> 然后淡出,最后从 DOM 中删除?

javascript - 使用ajax创建新的表行和表单提交

javascript - 如何解决 TypeError : Cannot convert undefined or null to object at Function. 键(<anonymous>)

javascript - 尝试使用 JavaScript 设置视频的 src 属性,出现 TypeError : videofile is null

javascript - Typeahead.js - 无法选择建议

javascript - ListView 的复选框未正确添加