Здесь я работаю над кодом, который использует сортировку Knockout. Он должен отображать вложенные сортировки 3+ уровней в глубину.Нокаут вложенной сортируемый источникParent.splice не является функцией
Данные передаются шаблону, но некоторые элементы возвращаются в исходное положение после отбрасывания (например, A, элементы B на самом верхнем уровне).
Как настроить вложенную сортировку, чтобы верхний уровень можно было использовать без ошибки?
ОШИБКА:
knockout-sortable.js:244 Uncaught TypeError: sourceParent.splice is not a function
or
knockout-sortable.js:252 Uncaught TypeError: targetParent.splice is not a function
JSFiddle - Similar working example
var viewModel = function() {
var self = this;
self.children = ko.observable([{
"name": "A",
"children": [{
"name": "A1",
"children": [{
"name": "A11"
}, {
"name": "A12"
}]
}, {
"name": "A2"
}]
}, {
"name": "B",
"children": [{
"name": "B1"
}, {
"name": "B2"
}]
}]);
}
ko.applyBindings(new viewModel());
ul {
border: solid 1px green;
list-style-type: none;
margin:0px;
}
li {
padding: 10px;
border: solid 1px blue;
margin:0px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="https://rawgithub.com/rniemeyer/knockout-sortable/master/build/knockout-sortable.js"></script>
<script id="nodeTmpl" type="text/html">
<li>
<!-- ko if: $data.name -->
<a href="#" data-bind="text: $data.name"></a>
<!-- /ko -->
<!-- ko if: $data.children -->
<ul data-bind="sortable: { template: 'nodeTmpl', data: $data.children }"></ul>
<!-- /ko -->
</li>
</script>
<ul data-bind="sortable: { template: 'nodeTmpl', data: $root.children }"></ul>
Предоставленный фрагмент кода все еще не работает. В то время как ошибка исчезла, перетаскивание заставляет элементы либо не двигаться, либо полностью исчезать. Я опубликовал ответ, который решает эти проблемы. Кроме того, удаление блоков '$ data' было ненужным. – Stanislas