2015-04-10 4 views
0

Я использую KendoUI (v2015.1.318) с AngularJS (v1.3.14). После каждого нажатия на узел данные будут извлекаться из API. После выбора некоторых элементов и нажатия кнопки «добавить» элементы будут добавлены в отдельный список, расширенные treenodes должны оставаться видимыми, но все отмеченные элементы должны быть отмечены флажками.KendoUI Treeview с AngularJS снять флажки флажки

После того, как я перебрал через источник данных, чтобы снять отмеченные элементы, я снова вызываю SetDataSource. Когда я расширил множество узлов и проверил несколько, пользовательский интерфейс замерзает несколько секунд, пока он обрабатывается.

Мне было интересно, не было ли более эффективного способа выполнить это.

Я сделал пример без API вызова:

$scope.saveTreeFields = function() { 
    var data = $scope.tree.dataSource._data; 
    for (var i = 0, j = data.length; i < j; i++) { 
     checkChildren(data[i]); 
    } 
    function checkChildren(data) { 
     if (data.checked) { 
      data.checked = false; 
     } 
     if (data.items !== undefined) { 
      for (var i = 0, j = data.items.length; i < j; i++) { 
       checkChildren(data.items[i]); 
      } 
     } 
    } 
    $scope.tree.setDataSource(data) 
}; 

Plunker example

ответ

0

Получен ответ от самого Telerik.

можно назвать множество DataItem («проверено», ложный) метод, чтобы уведомить модель изменения поля, и TreeView будет обновляться автоматически.

Код меняется

$scope.saveTreeFields = function() { 
    var data = $scope.tree.dataSource.data(); 
    for (var i = 0, j = data.length; i < j; i++) { 
     checkChildren(data[i]); 
    } 
    function checkChildren(data) { 
     if (data.checked) { 
      data.set("checked", false); 
     } 
     if (data.items !== undefined) { 
      for (var i = 0, j = data.items.length; i < j; i++) { 
       checkChildren(data.items[i]); 
      } 
     } 
    } 
}; 
Смежные вопросы