2016-09-06 5 views
0

여기 내 문제가 :읽기 검도 트리 후 Tree_view 정의되지 않았습니다

나는 그를 표시하는 나무를 처음로드합니다. 세션의 파일 이름 "state"의 값을 변경하여 트리에서 노드를 활성화 또는 비활성화 할 수 있습니다.

그러나 데이터베이스에서 NE 값을 변경하고 JSON을 반환 한 후 트리를 다시 읽고 변경 사항을 적용하여 트리를 새로 고치지 만 실패하고 콘솔에 쓰게됩니다 : "TypeError : Tree_view.getElementsByClassName (...) [0]. 어린이 [(item.id_perso - 1)]. 어린이 [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"에, 내 문제를 해결 한 그것은 일시 정지를 두지 않고 데이터가 시간이 없어 적재됩니다.