2012-03-13 41 views
2

我無法弄清楚如何在拖放節點後保存新的dynatree。如何在拖放後保存dynatree結構

我有2 dynatree,我從一個拖到另一個,但我不知道我是否可以得到新樹結構的信息。 我的第一棵樹:

$("#tree1").dynatree({ 

       title: "tree", 
       children: [{ title: "tree1", isFolder: true}], 
       dnd: { 
        onDragStart: function (node) { 

         logMsg("tree.onDragStart(%o)", node); 
         return true; 
        }, 
        onDrop: function (node, sourceNode, hitMode, ui, draggable) { 

         logMsg("tree.onDrop(%o, %o, %s)", node, sourceNode, hitMode); 
         sourceNode.move(node, hitMode); 
        } 
       } 


      }); 

與第二:

$("#Tree2").dynatree({ 
       title: "Tree", 

       children: [{ title: "MyTree", isFolder: true}], 


       isLazy: true, 

       dnd: { 
        onDragStart: function (node) { 

         logMsg("tree.onDragStart(%o)", node); 
         return true; 
        }, 
        onDrop: function (node, sourceNode, hitMode, ui, draggable) { 

         logMsg("tree.onDrop(%o, %o, %s)", node, sourceNode, hitMode); 
         sourceNode.move(node, hitMode); 
        }, 
        onDragEnter: function (node, sourceNode) { 

         logMsg("tree.onDragEnter(%o, %o)", node, sourceNode); 
         return true; 
        }, 
        onDragOver: function (node, sourceNode, hitMode) { 

         logMsg("tree.onDragOver(%o, %o, %o)", node, sourceNode, hitMode); 
        }, 

        onDragLeave: function (node, sourceNode) { 

         logMsg("tree.onDragLeave(%o, %o)", node, sourceNode); 
        }, 
        onDrop: function (node, sourceNode, hitMode, ui, draggable) { 

         logMsg("tree.onDrop(%o, %o)", node, sourceNode); 
         var copynode; 
         var rootNode = $("#OrganizationTree").dynatree("getRoot"); 
         if (sourceNode && (node.data.title === 'Organization' || node !== rootNode)) { 
          copynode = sourceNode.toDict(true, function (dict) { 
           dict.title = dict.title; 
           dict.key = sourceNode.data.key; 
           node.data.isFolder = true; 

          }); 
         } else { 
          alert(" please drop your node into the organization"); 
         } 
         if (hitMode == "over") { 
          // Append as child node 
          node.addChild(copynode); 
          sourceNode.remove();  
         } 
        } 
       } 

      }); 

如何保存tree2結構? 由於事先

回答

4

你可以使用這樣的事情:

dnd: { 
      onDrop: function(node, sourceNode, hitMode, ui, draggable) { 
      /** This function MUST be defined to enable dropping of items on 
      * the tree. 
      */ 
      sourceNode.move(node, hitMode); 
      var currentTree = $("#tree").dynatree("getTree").toDict(); 
      $.post("forajax.php", { recieved: currentTree}, 
       function(data) { 
       $("#output").html(data); 
      }); 
      } 
     } 

forajax.php

<? 
function noFalseMulti($var) 
/* 
*This function will remove from array key containing 'false' of 'null' (empty keys) 
* 
*I have realized, if there are this data it shows error-I don't know why 
*/ 
    { 
    $var=array_filter($var, 'noFalse'); 
    foreach($var as $key => $value) 
    { 
    if(is_array($var[$key])) 
     { 
     $var[$key]=noFalseMulti($var[$key]); 
     } 
    } 
    return $var; 
    } 

$dataToSave=serialize(noFalseMulti($_POST['recieved'])); 
?> 

無論你想給你保存數據,。而當你再次需要它們時,使用此:

$("#tree").dynatree({ 
     initAjax: {url: "createTree.php", 
        data: {//key: "root", 
          // Optional arguments to append to the url 
          //mode: "all" 
          } 
        }, 

螞蟻的createTree.php

<? 
$yourSavedData=''; //place here the data you have saved before 
$array=unserialize($yourSavedData); 
echo json_encode($array); 
?> 

我不知道如果我解釋的不夠好 - 如果不只是答覆這裏。

希望它能幫助你或其他人。

+0

我「米尋找同樣的信息..整個谷歌組這個插件不包含關於如何保存整個樹信息..很奇怪,因爲我們需要以保存它!! – 2013-10-28 19:17:36

-1

只需使用toDict()函數即可。

從文檔:

// Get a JavaScript object copy of the tree 
var dict = $("#tree").dynatree("getTree").toDict(); 
// ... then use Ajax to send this to your server... 
+0

然後是什麼?這個代碼片段,沒有任何上下文,幾乎沒用。樹的前一個狀態是什麼?父母是否改變?新位置是什麼?等等等等。 – 2018-01-29 20:36:46