2016-09-06 49 views
0

這裏是我的問題:Tree_view在讀取劍道樹後undefined

我加載第一次我的樹顯示他。 我可以更改會話的文件名「狀態」的值以啓用或禁用樹中的節點。我在數據庫中更改ne值並返回JSON後,我再次讀取樹來刷新我的樹,但它失敗了,並在控制檯中寫入: 「TypeError:Tree_view.getElementsByClassName(...) [0] .children [(item.id_perso - 1)]。children [1]未定義「。

我不明白的是我第一次通過這些函數,它工作得很好,但是當我重新加載它失敗顯然是因爲它未定義。

感謝任何幫助。

$(document).ready(function() { 
    $('#Tree_view').kendoTreeView({ 
     template: "#= item.name #", 
     dataSource: Parcours, 
     dataTextField: 'name', 
     loadOnDemand: true, 
     expand: onExpandedItem 
    }); 
}); 

function onExpandedItem(e) { 

    var id_user = @Model.id; 

    var item = $('#Tree_view').data('kendoTreeView').dataItem(e.node); 
    var treeview = $('#Tree_view').data('kendoTreeView'); 
    var type = item.fields.type; 

    if (item.level() > 0) { 
     item.id_parcours = item.parentNode().id_parcours; 
     if (item.level() == 2) { 
      item.id_promo = item.parentNode().id; 
     } 
    } 
    else item.id_parcours = item.Id; 

    switch (type) { 
     case 'parcours': 
      item.children.transport.options.read = { 
       url: '@Url.Action("Get_Session", "Users")' + '?user_id=' + id_user, 
       dataType: "json", 
      }; 
      break; 

     case 'session': 
      item.children.transport.options.read = { 
       url: '@Url.Action("Get_Matiere")' + '?user_id=' + id_user, 
       dataType: "json" 
      }; 
      break; 

     default: 
      break; 
    } 

    if (item.level() == 0) { 
     setTimeout(function() { waitDisable(item, treeview); }, 1000); 
    } 
} 

function waitDisable(item, treeview) { 
    if (item.fields.type == "parcours") 
    { 
     var node = Tree_view.getElementsByClassName('k-group')[0].children[item.id_perso - 1].children[1].children; 
     for (i = 0; i < item.children._data.length; i ++) 
     { 
      if (item.children._data[i].state != null) { 
       node[i].children[0].children[1].className = "k-in k-state-disabled"; 
       node[i].children[0].children[0].className = ".k-icon-remove"; 
      } 
      else node[i].children[0].children[0].className = "k-icon k-plus"; 

      addRow(node, item, i, treeview); 
     } 
    } 
} 

var cmp = 0; 
var One_Time = false; 

function addRow(node_Here, item, i, treeview) { 

    var actual_row = node_Here[i].children[0]; 
    if (actual_row.childNodes.length < 3) { 
     var newSpan = document.createElement('button'); 
     if (item.children._data[i]._childrenOptions.data.state != null) { 
      newSpan.appendChild(document.createTextNode("Re-Up")); 
      newSpan.className = "change_state btn btn-success btn-xs"; 
     } 
     else { 
      newSpan.appendChild(document.createTextNode("Down")); 
      newSpan.className = "change_state btn btn-danger btn-xs"; 
     } 
     actual_row.appendChild(newSpan); 
    } 
    cmp += 1; 
    if (cmp == item.children._data.length) 
     One_Time = true; 
    if (One_Time) { 
     addClickListner(item, i, treeview); 
     One_Time = false; 
     cmp = 0; 
    } 
} 

function addClickListner(item, i, treeview) { 
    $(".change_state").click(function (event) { 
     var name_Promo_Rm = event.target.parentNode.children[1].textContent; 
     var User_Select = event.view.Parcours.transport.read.data.user_id; 
     $.ajax({ 
      url: '@Url.Action("ChangeStatutBase", "Users")', 
      type: 'GET', 
      dataType: 'json', 
      data: { Name_Promo: name_Promo_Rm, User_id: User_Select }, 
     }); 
     refreshTree(treeview); 
    }) 
} 

// Refresh tree 
function refreshTree(treeview) { 
    // Save open items 
    saveExpandedItems(treeview); 
    // Reload data source 
    treeview.dataSource.read(); 
    // Load open items 
    console.log("OKKKKKKK"); 
    setTimeout(loadExpandedItems(), 600); 

} 

回答

0

我已經解決我的問題,在我已經放在底部的「setTimeout的」「()」中的第一個參數,它不把停頓和數據沒有時間被加載。