3

我正在使用带有“复选框”插件的 jsTree jQuery 插件,并使用异步 http 请求来延迟加载树的每个级别。一切都很好,除了我无法让树在第一级之后预先选择某些节点。我正在使用“selected”属性来提供一组 ID 以进行预选。树的顶层中的 ID 已正确预选。但是,在加载关卡时不会选择树的较低级别中的 ID。我错过了什么吗?

这是构造函数代码:

    var myArrayOfIDs = new Array();
    myArrayOfIDs[0] = '123';  //etc...

    $(sDivID).tree(
        {
            data : {
                async : true,
                opts : {url : sURL}
            },
            plugins:{ 
                "checkbox" : {three_state : false}
            },
            selected : myArrayOfIDs,
            ui:{
                theme_name : "checkbox",
                dots : false,
                animation : 400
            },
            callback : {
                beforedata : function(NODE, TREE_OBJ) { return { id : $(NODE).attr("id") || 0, rand : Math.random().toString() } }
            }
        }
    )
4

3 回答 3

6
$(".jstree").jstree({
    "plugins" : [ "themes", "html_data", "checkbox", "ui" ],
    "checkbox": {
        "real_checkboxes": true,
        "real_checkboxes_names": function (n) {
            return [n[0].id, 1];
        },
        "two_state": true
    }
}).bind("loaded.jstree", function (event, data) {
    $('li[selected=true]').each(function () {
        $(this).removeClass('jstree-unchecked').addClass('jstree-checked');
    });
});

我将它用于最新版本的 jstree。

于 2011-10-13T12:47:28.950 回答
3

嗯,你的代码对我来说看起来不错。

我在我的解决方案中采用了稍微不同的方法,因为我希望服务器(即您的 sURL)告诉我应该选择哪些项目 - 然后在 jsTree 的 onload 回调中选择它们。

更新:我已在此处将我的 jsTree 博客文章更新为最新版本的 jsTree

-马特

于 2010-05-19T04:43:27.187 回答
1

这是我在加载树后更新选择的方式:

$('#jstree_div')
      .on('changed.jstree', treeChanged)
      .on('loaded.jstree', treeLoaded)
      .jstree({
      'plugins': ["checkbox"],
      'core': {
          'data': {
              'url': '/xmldata/getcategories'
          }
      }
  });

function treeLoaded(event, data) {
    data.instance.select_node(['2', '5']); //node ids that you want to check
}
于 2014-04-25T11:42:35.053 回答