Я ищу способ реализовать простую вложенную/вложенную древовидную структуру в KnockoutJS; и он должен допускать только два уровня.KnockoutJS и вложенный сортируемый список (двухмерный)
То, что я нашел до сих пор это (и целый ряд очень похожих подходов здесь на SO): Knockout.js nested sortable bindings
Однако, в данном примере - и другие, «контейнеры» не может стать «Дети» и наоборот ,
В принципе, я ищу структуру, как это: http://jsfiddle.net/uhVAW/2/
Т.е. он в конечном итоге отобразит список с двумя уровнями: родительские категории и их дети.
Мое дерево-структура в Knockout ViewModel принимает эту форму (без всякой логики обновления):
var VM = function(cats)
{
this.categories = ko.observableArray(cats); // bound to the list
}
var Category = function
{
this.name = ko.observable();
this.children = ko.observableArray([]); // if exists (i.e. if the cat is a parent), this is bound to a list within the <li>
}
Так, в сущности:
- Сортировка родительского уровня
- Сортировка детей в родители
- Дети могут стать родителями & наоборот
- Только для n-уровней гнездования (2 в моем случае)
Cheers!
Это абсолютно фантастический - спасибо! Я немного изменил его, чтобы убедиться, что всегда есть хотя бы пустой наблюдаемый массив. В противном случае нельзя добавлять элементы в пустые списки: http://jsfiddle.net/Lqttf/1/ | Сказанное: есть ли у вас какие-либо указания относительно того, как я могу позволить только два уровня? Еще раз спасибо! – JDR
Хорошо, я был немного медленным. Я мог бы привязать allowDrop к наблюдаемому логическому значению, которое возвращает «false» со второго уровня вперед. :-) – JDR
@niemeyer, сэр в первую очередь спасибо за ваши решения, связанные с KNOCKOUT-SORTABLE, KNOCKOUT-RECURSIVE. сэр, я также ищу точное решение, которое упомянуто выше, я хочу, чтобы одно решение вычислило общее количество для каждого узла. Каждый узел имеет два свойства (название, количество), поэтому мне нужно отобразить сумму сумм (детей) на родительском узле. –