2013-09-28 3 views
3

Я использовал следующий код, чтобы сделать дерево в knockout.js с многоуровневыми данными.Tree view with check all or uncheck all in knockout.js

<ul data-bind="template: { name: 'itemTmpl', foreach: $data.items }"></ul> 

<script id="itemTmpl" type="text/html"> 
    <li> 
     <span data-bind="text: name"></span> 
     <input type='checkbox'> 
     <ul data-bind="template: { name: 'itemTmpl', foreach: $data.items }"> 

     </ul> 
    </li> 
</script> 

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

Here is js fiddle link

http://jsfiddle.net/tEGUp/

+0

Ваши флажков Арен» t данные привязаны ко всему. Вы пытаетесь просто показать чек или действительно ли проверенное свойство? –

+0

мои флажки используются для активации и деактивации этого узла в db, я имею в виду, что они являются привязкой к базе данных. – rahularyansharma

+0

@rahularyansharma, поэтому в реальности ваш флажок выглядит примерно так: ' nemesv

ответ

1

Я сделал версию, не изменяет Orginal данных, но использует отображение КО.

Я также взял opertunity, чтобы показать, насколько меньше кода вы должны написать с моей библиотекой Конвенции

MyApp.TreeViewModel = function(data) { 
    var mapping = { 
     items: { 
      create: function(options) { 
       return new MyApp.TreeViewModel(options.data); 
      } 
     } 
    }; 
    this.checked = ko.observable(false); 
    this.checked.subscribe(this.onChecked, this); 

    this.items = ko.observableArray(); 

    ko.mapping.fromJS(data, mapping, this);  
}; 

MyApp.TreeViewModel.prototype = { 
    constructor: MyApp.TreeViewModel, 
    onChecked: function(checked) { 
     ko.utils.arrayForEach(this.items(), function(item) { 
      item.checked(checked); 
     }); 
    } 
}; 
+0

Я только что нашел одну проблему, которая в случае, если я проверил morphed, а затем удалю проверку с 5 дней, то это morphed также должно быть не проверено – rahularyansharma

+0

Вы можете использовать options.parent в функции create, чтобы добавить родительский для ребенка, при снятии отметки с ребенка, снимите флажок с родителя – Anders

+0

Возможно ли отредактировать ваш код, поскольку я новичок в knockout.js – rahularyansharma

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