/ / Ako sa zaplní strom jquery select widget? - javascript, jquery, html, css, json

Ako naplniť jquery treeselect widget? - javascript, jquery, html, css, json

Mám ťažkosti s naplnením tejto jQuery treeelect widget pomocou súboru json (alebo čokoľvek). Som nový v jQuery / javascript, takže mi asi chýbajú nejaké základy.

Mám doplnok z https://github.com/travist/jquery.treeselect.js a nenašli sme žiaden príklad, ako ho načítať.

<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.js"></script>
<script type="text/javascript" src="js/jquery.moreorless.js"></script>
<script type="text/javascript" src="js/jquery.treeselect.js"></script>
<script type="text/javascript" src="js/jquery.chosentree.js"></script>

<link rel="stylesheet" type="text/css" href="css/moreorless.css"/>
<link rel="stylesheet" type="text/css" href="css/treeselect.css"/>
<link rel="stylesheet" type="text/css" href="css/chosen.css"/>
<script type="text/javascript">
jQuery(function () {

var data1 = ["EVENT1", "EVENT2"];
var data2 = [{
"id": 1,
"name": "A green door"
},
{
"id": 2,
"name": "A blue door"
}
]

$("div.chosentree").chosentree({
width: 200,
deepLoad: true,
default_value: data2, // does not work
load: function (node, callback) {

// What do I put here?
/**
* This would typically call jQuery.ajax to load a new node
* on your server where you would return the tree structure
* for the provided node.
*/
}
});
});
</script>
</head>
<body>
<div class="chosentree"></div>
</body>
</html>

odpovede:

0 pre odpoveď č. 1

Najlepší spôsob, ako zistiť, ako to funguje, je pozrieť sa na ukážkové súbory uvedené v repo nájdenom @ https://github.com/travist/jquery.treeselect.js/blob/master/treeselect.html, Tu uvidíte nasledujúci kód.

$("div.chosentree").chosentree({
width: 500,
deepLoad: true,
showtree: true,
load: function(node, callback) {
setTimeout(function() {
callback(loadChildren(node, 0));
}, 1000);
}
});

Kód v rámci load metóda tu v skutočnosti vykonáva falošnú žiadosť o to, ako by údaje mali vyzerať. Urobí to tak, že zavoláte volanú metódu loadChildren ktorý je definovaný v nájdenom súbore @ https://github.com/travist/jquery.treeselect.js/blob/master/index.html, Čo je nasledujúce ...

var maxDepth = 3;
var loadChildren = function(node, level) {
var hasChildren = node.level < maxDepth;
for (var i=0; i<8; i++) {
var id = node.id + (i+1).toString();
node.children.push({
id:id,
title:"Node " + id,
has_children:hasChildren,
level: node.level + 1,
children:[]
});
if (hasChildren && level < 2) {
loadChildren(node.children[i], (level+1));
}
}
return node;
};

Dôležité je uvedomiť si, že ide o „falšovanie“ požiadavky na server. Toto v podstate napĺňa požiadavku na server, ktorý by vrátil niečo, čo vyzerá nasledovne.

{
"id": "1",
"title": "Node 1",
"has_children": "1",
"children": [
{
"id": "11",
"title": "Node 11",
"has_children": "1",
"children": [

]
},
...
...
]
}

Na load metóda sa potom volá odovzdaním do jedného objektu uzla, ktorý môžete použiť na načítanie všetkých detí pod týmto uzlom, ak si budete priať.

Dúfam, že to pomôže.


1 pre odpoveď č. 2

Chcel by som uverejniť tento kód, pretože som strávil posledné 2 hodiny tým, že by to nebral surový JSON. Je to tak, ale nezabudnite spustiť reťazcový literál pomocou JSON.parse (jsonString);

Príklad:

    jQuery(function() {
JSONObject = JSON.parse("{"id":"01","title":"Node 01","has_children":true,"level":1,"children":[{"id":"011","title":"Node 011","has_children":true,"level":2,"children":[{"id":"0111","title":"Node 0111","has_children":false,"level":3,"children":[]}]}]}");

$("div.chosentree").chosentree({
width: 500,
deepLoad: true,
load: function(node, callback) {
callback(JSONObject);
}
});
});