2016-02-14 5 views
0

Я использую управление древовидной структурой Kendo UI с флажками в asp.net mvc. И родительский, и дочерний узлы имеют свойства id. Когда пользователь проверяет все дочерние узлы, я хочу отслеживать, какие из них были проверены. Ниже приведен код cshtml вместе с кодом javascript, чтобы отслеживать идентификаторы и мой json, используемый для заполнения дерева.Как отслеживать идентификаторы проверенных узлов в Kendo UI Treeview

   <div style="padding-top: 2em;"> 
       <h4>Status</h4> 
       <p id="result">No nodes checked.</p> 
      </div> 

     <script>     
      $("#treeview").kendoTreeView({ 
       checkboxes: { 
        checkChildren: true, 
       }, 
       dataSource: { 
        //type: "odata", 
        transport: { 
         read: { 
          url: '@Url.Content("~/Document/GetDocuments")', 
          type: "post", 
          dataType: "json" 
         } 
        },       
        schema: { 
         model: { 
          id: "id", text: "Name", 
          children: "Files" 
         } 
        } 
       }, 
       dataTextField: [ "Name", "FileName"], 
       check: onCheck         
      }); 
      // function that gathers IDs of checked nodes 
      function checkedNodeIds(nodes, checkedNodes) { 
       for (var i = 0; i < nodes.length; i++) {      
        if (nodes[i].checked) { 
         checkedNodes.push(nodes[i].name); 
        } 
        if (nodes[i].hasChildren) { 
         checkedNodeIds(nodes[i].children.view(), checkedNodes); 
        } 
       } 
      } 
      // show checked node IDs on datasource change 
      function onCheck() {     
       var checkedNodes = [], 
        treeView = $("#treeview").data("kendoTreeView"), 
        message; 
       checkedNodeIds(treeView.dataSource.view(), checkedNodes); 
       if (checkedNodes.length > 0) {       
        message = "IDs of checked nodes: " + checkedNodes.join(","); 
       } else { 
        message = "No nodes checked."; 
       } 
       $("#result").html(message); 
      } 
     </script> 

json object 
    [{"id":1,"Name":"Checking", 
    "Files":[{"Filename":"doc10","id":"1afd5a4f-086f-44d2-9287-8098384e379e"}, 
    {"Filename":"doc11","id":"89ea3366-14b8-4e91-8273-6e2a51fbe516"}]}, 
    {"id":2,"Name":"Saving", 
    "Files":[{"Filename":"doc20","id":"c7a88f5d-067e-4f20-93b6-da6eff69d532"}, 
    {"Filename":"doc21","id":"8a0a62ed-1b4a-4e5e-8d59-d57a975a7ab0"}]}] 

Когда я проверяю некоторые дочерние узлы, он отображает только «идентификаторы проверенных узлов: ,,,». Таким образом, похоже, что значение идентификатора становится пустым.

Благодаря

ответ

0

Пожалуйста, попробуйте ниже фрагмент кода.

Чтобы получить все выбранные идентификаторы: -

<div id="treeview"></div> 
<script> 
    var data = [{ "id": 1, "Name": "Checking", "Files": [{ "Filename": "doc10", "id": "1afd5a4f-086f-44d2-9287-8098384e379e" }, { "Filename": "doc11", "id": "89ea3366-14b8-4e91-8273-6e2a51fbe516" }] }, { "id": 2, "Name": "Saving", "Files": [{ "Filename": "doc20", "id": "c7a88f5d-067e-4f20-93b6-da6eff69d532" }, { "Filename": "doc21", "id": "8a0a62ed-1b4a-4e5e-8d59-d57a975a7ab0" }] }]; 

    var inline = new kendo.data.HierarchicalDataSource({ 
     data: data, 
     schema: { 
      model: { 
       id: "id", text: "Name", 
       children: "Files" 
      } 
     } 
    }); 

    $(document).ready(function() { 
     $("#treeview").kendoTreeView({ 
      checkboxes: { 
       checkChildren: true, 
      }, 
      dataSource: inline, 
      dataTextField: ["Name", "Filename"], 
      check: onCheck 
     }); 
    }); 

    function checkedNodeIds(nodes, checkedNodes) { 
     for (var i = 0; i < nodes.length; i++) { 
      if (nodes[i].checked) { 
       checkedNodes.push(nodes[i].id); 
      } 
      if (nodes[i].hasChildren) { 
       checkedNodeIds(nodes[i].children.view(), checkedNodes); 
      } 
     } 
    } 

    function onCheck() { 
     var checkedNodes = [], 
      treeView = $("#treeview").data("kendoTreeView"), 
      message; 
     checkedNodeIds(treeView.dataSource.view(), checkedNodes); 
     if (checkedNodes.length > 0) { 
      message = "IDs of checked nodes: " + checkedNodes.join(","); 
     } else { 
      message = "No nodes checked."; 
     } 
     console.log(message); 
    } 
</script> 

Чтобы получить все выбранные имя и имя файла детали: -

<div id="treeview"></div> 
<script> 
    var data = [{ "id": 1, "Name": "Checking", "Files": [{ "Filename": "doc10", "id": "1afd5a4f-086f-44d2-9287-8098384e379e" }, { "Filename": "doc11", "id": "89ea3366-14b8-4e91-8273-6e2a51fbe516" }] }, { "id": 2, "Name": "Saving", "Files": [{ "Filename": "doc20", "id": "c7a88f5d-067e-4f20-93b6-da6eff69d532" }, { "Filename": "doc21", "id": "8a0a62ed-1b4a-4e5e-8d59-d57a975a7ab0" }] }]; 

    var inline = new kendo.data.HierarchicalDataSource({ 
     data: data, 
     schema: { 
      model: { 
       id: "id", text: "Name", 
       children: "Files" 
      } 
     } 
    }); 

    $(document).ready(function() { 
     $("#treeview").kendoTreeView({ 
      checkboxes: { 
       checkChildren: true, 
      }, 
      dataSource: inline, 
      dataTextField: ["Name", "Filename"], 
      check: onCheck 
     }); 
    }); 

    function checkedNodeIds(nodes, checkedNodes) { 
     for (var i = 0; i < nodes.length; i++) { 
      if (nodes[i].checked) { 
       if (nodes[i].Name) 
        checkedNodes.push(nodes[i].Name); 
       else 
        checkedNodes.push(nodes[i].Filename); 
      } 
      if (nodes[i].hasChildren) { 
       checkedNodeIds(nodes[i].children.view(), checkedNodes); 
      } 
     } 
    } 

    function onCheck() { 
     var checkedNodes = [], 
      treeView = $("#treeview").data("kendoTreeView"), 
      message; 
     checkedNodeIds(treeView.dataSource.view(), checkedNodes); 
     if (checkedNodes.length > 0) { 
      message = "IDs of checked nodes: " + checkedNodes.join(","); 
     } else { 
      message = "No nodes checked."; 
     } 
     console.log(message); 
    } 


</script> 

Позвольте мне знать, если какой-либо интерес.

+0

Спасибо за ответ. Оказывается, так как мне нужен идентификатор от детей, я должен идти еще глубже. Поэтому я должен использовать два для циклов. – Massey

Смежные вопросы