0

我有一个 Web 应用程序(JSP 和 Servlet 以及 jQuery),我正在使用 DynaTree 来显示使用用户搜索找到的一组文件。用户当然可以输入不同的值,从而产生一组不同的匹配文件。

所以,我的问题:

鉴于在我的 JSP 的 JavaScript 中对树进行了静态编码:

$("#tree").dynatree({
  ...
  children: [
    {title: "Folder 2", isFolder: true, key: "folder2",
      children: [
        {title: "Sub-item 2.1"},
        {title: "Sub-item 2.2"}
      ]
    },
    {title: "Item 3"}
  ]
...

如何以编程方式创建此结构?我假设有某种方法可以创建或访问根,然后使用 addChild( aNode ) 或类似的方法,但我没有找到一个好的示例/参考。

有没有人这样做?谢谢!

4

3 回答 3

2

我是用 Yii2 做的,使用 json 对象。我使用了用于初始化树结构的​​ initAjax 选项:

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

<script>
$("#tree").dynatree({
    initAjax: {url: global+"companyAdmin/roles-master/get-department-and-menus",},
    checkbox: true,       // Show checkboxes.
    icon:false,
    selectMode: 3,           //3:multi-hier            
});
</script>

并在生成 JSON 对象的服务器上编写函数:

public function actionGetDepartmentAndMenus() {
    $responseData = array();
    $responseData['title']='ABC';
    $responseData['id']=1;
    $responseData['expand']=true;
    $responseData['children']['title']='ABC';
    $responseData['children']['id']=1;
    $responseData['children']['expand']=true;
    echo json_encode($responseData);
}

参考

于 2017-08-28T13:31:20.440 回答
1

让它工作。这是jQuery:

    $('#findFiles').click(function() {  // Locate HTML DOM element with ID "findFiless" and assign the following function to its "click" event...
    chosenSite = document.getElementById("siteName").value;
    searchVal = document.getElementById("searchFor").value;
    searchTyp = document.getElementById("searchType").value;
    $.get('FileSearchServlet', {siteName: chosenSite, searchFor: searchVal, searchType: searchTyp}, function(responseJson) {    // Execute Ajax GET request on URL of "FileSearchServlet" and execute the following function with Ajax response JSON...
        //-- toClient
        var resultsToClientNode = $("#tree").dynatree("getTree").selectKey("resultsToClient");
        resultsToClientNode.removeChildren();
        toClientFilenames = responseJson.toClient;  //0-N filenames
        $.each(responseJson.toClient, function() {
            resultsToClientNode.addChild({
              title: this
            });
        });         
       ...

这是响应中的 JSON(使用 Firebug > Net > XHR 来查看):

fromClient
["O_TE015308_XX_343_182754070041.OLD", "O_TE015308_XX_343_182755030040.OLD", "O_TE015308_XX_353_131142014034.OLD"]

toLab
[]

fromLab
[]

toClient
["R_TE015308_XX_340_154659.OLD"]
于 2012-01-18T15:13:24.927 回答
0

插件上的children属性dynatree是一个简单的 json 结构。如果没有更多信息,很难回答您的问题。但是您可以在显示生成的 html 之前在服务器端创建这个 json 数据,或者您可以调用一些东西ajax来取回这个 json 数据。

有几种方法可以生成它,这取决于你想要什么。

如果这不能帮助您理解这一点,请在您想要动态创建节点时提供更明确的信息。

于 2012-01-11T21:24:34.697 回答