Проблема в том, что данные подгружаются из бд только при первом открытии ветки, при повторном данные берутся из памяти, т.е. если добавлю новую ветку, то она неотобразится, если её родитель был открыт до этого. Пробывал прилипить tree.removeChildren(node); Написано, что она используется для удаления чилдренов этой ноды из памяти и сброса флага динамической загрузки. Но ничего неполучается Хелп ми плиз, если вы юзали это дерево. Мое дерево: | Код | <script type="text/javascript"> YAHOO.example.treeExample = function() { var tree, currentIconMode, nodeType; function loadNodeData(node, fnLoadComplete) { var nodeLabel = encodeURI(node.label); //tree.removeChildren(node); var sUrl = "tree.htm?nodeLabel="+nodeLabel; var callback = { success: function(oResponse) { YAHOO.log("XHR transaction was successful.", "info", "example"); YAHOO.log(oResponse.responseText); var oResults = eval("(" + oResponse.responseText + ")"); if((oResults.ResultSet.Result) && (oResults.ResultSet.Result.length)) { if(YAHOO.lang.isArray(oResults.ResultSet.Result)) { for (var i=0, j=oResults.ResultSet.Result.length; i<j; i++) { var tempNode = new YAHOO.widget.TextNode({label:oResults.ResultSet.Result[i][0], type:oResults.ResultSet.Result[i][1]}, node, false); if(oResults.ResultSet.Result[i][1]==0){ tempNode.labelStyle = "icon-dep"; }else{ tempNode.labelStyle = "icon-user"; } tempNode.onLabelClick=onLabelClick; } } else { var tempNode = new YAHOO.widget.TextNode({label:oResults.ResultSet.Result[0], type:oResults.ResultSet.Result[1]}, node, false); if(oResults.ResultSet.Result[1]==0){ tempNode.labelStyle = "icon-dep"; }else{ tempNode.labelStyle = "icon-user"; } tempNode.onLabelClick=onLabelClick; } } oResponse.argument.fnLoadComplete(); }, failure: function(oResponse) { YAHOO.log("Failed to process XHR transaction.", "info", "example"); oResponse.argument.fnLoadComplete(); }, argument: { "node": node, "fnLoadComplete": fnLoadComplete }, timeout: 7000 }; YAHOO.util.Connect.asyncRequest('GET', sUrl, callback); }
function buildTree() { tree = new YAHOO.widget.TreeView("treeDiv1"); tree.setDynamicLoad(loadNodeData); var root = tree.getRoot(); tree.removeChildren(root); //вот тут вставил эту хрень var aTreeRoot = new Array(); <c:forEach var="item" items="${refData}" > <c:if test="${item.key == 'departments'}"> <c:forEach var="department" items="${refData[item.key]}" > <c:if test="${empty department.pid}"> aTreeRoot.push('<c:out value="${department.name}"/>'); </c:if> </c:forEach> </c:if> </c:forEach> var aStates = aTreeRoot; for (var i=0, j=aStates.length; i<j; i++) { var tempNode = new YAHOO.widget.TextNode({label:aStates[i],type:0}, root, false); tempNode.labelStyle = "icon-dep"; tempNode.onLabelClick=onLabelClick; } tree.draw(); } var onLabelClick = function(oNode) { //tree.removeChildren(oNode.data); //и тут пробывал if(oNode.data.type == 0){ document.getElementById('selectedDep').value = oNode.data.label; document.getElementById('selectedUser').value = 'null'; } if(oNode.data.type == 1){ document.getElementById('selectedUser').value = oNode.data.label; document.getElementById('selectedDep').value = 'null'; } } return { init: function() { buildTree(); } } } ();
//once the DOM has loaded, we can go ahead and set up our tree: YAHOO.util.Event.onDOMReady(YAHOO.example.treeExample.init, YAHOO.example.treeExample,true) </script>
|
|