6
votes

Jstere - Ajout de nœuds d'enfants qui contiennent eux-mêmes des enfants

J'ai du code dans lequel j'ai besoin de la possibilité d'ajouter des nœuds d'enfants à un jstree qui contiennent eux-mêmes des enfants. Le code ci-dessous ajoute un nœud «Child2» correctement à «Child1» mais ignore les données de l'enfant3. Toute aide beaucoup appréciée. Le code suit:

<html>
<head>
<script type="text/javascript" src="http://static.jstree.com/v.1.0rc2/jquery.js"></script>
<script type="text/javascript" src="http://static.jstree.com/v.1.0rc2/jquery.jstree.js"></script>

<script type="text/javascript">
$(document).ready(function() {
    $(function () {
        $("#tree").jstree({ 
            "json_data" : {
                "data" : [
                    { 
                        "data" : "parent", 
                        "attr" : { "id" : "root.id" }, 
                        "children" : [ { "data" : "child1",
                                         "attr" : { "id" : "child1.id" },
                                         "children" : [ ] }
                                     ]
                    },
                ]
            },
            "plugins" : [ "themes", "json_data", "crrm" ]
        });
    });
    $("#add").click(function() {
        $("#tree").jstree("create", $("#child1\\.id"), "inside",
                { "data" : "child2", "attr" : { "id" : "child2.id" },
                  "children" : [ { "data" : "child3", "attr" : { "id" : "child3.id" }, "children": [ ] } ] },
                          function() { alert("added"); }, true);
    });
});
</script>
</head>

<body>

<div id="tree" name="tree"></div>

<input type="button" id="add" value="add" />
</body>
</html>


2 commentaires

Peut-être que ce n'est pas possible? Je présumerais que la fonction Create a été mise en œuvre pour recourir sur les enfants, mais peut-être pas ... va jeter un coup d'œil à la source ...


J'ai eu le même problème comment pourriez-vous résoudre?


3 Réponses :


0
votes

Autant que je puisse voir à partir de la source, la fonction "Créer" ne prend pas en charge la création d'un arbre à plusieurs niveaux à la fois. La méthode appelée appelée n'utilise pas et vérifie l'attribut enfants sur les données transmises.


0 commentaires

0
votes

Vous devez le faire vous-même, quelque chose comme ça: xxx


0 commentaires

1
votes

Tout d'abord, ce n'est pas valide JSON avec la dernière virgule à l'intérieur du dernier support. Prenez cela:

/**
 * inserts a new node (json object returned from url) into an existing node (parentNodeId), for the div ud in jsTreeName which is
 * an instanced jstree.
 * @param string jsTreeName  {name of an instanced tree}
 * @param string url  {returns json}
 * @param string parentNodeId {string of the parent node id}
 */
function insertUrlIntoNode(jsTreeName, url, parentNodeId) {
  var nodeTree = getSynchronousJson(url);
  var tree = $('#'+jsTreeName).jstree(true);
  tree.deselect_all();
  var sel = tree.create_node(parentNodeId, nodeTree);
  //tree.deselect_all();
  //tree.select_node(sel);  //optionally you could select the new node after insersion
}


0 commentaires