В настоящее время я пытаюсь разработать небольшую функцию, используя сортировку нокаутом, которая должна работать следующим образом.
У меня есть 3 наблюдаемые коллекции: первая - это пустая область для сброса, вторая содержит первые 3 элемента из коллекции (видимые), а третья содержит оставшуюся часть моего набора данных (скрытую). При перетаскивании элемента из 2-й коллекции в 1-ю, 1-й элемент в 3-м массиве, который соответствует свойству «группа» только что перемещенного элемента, должен быть вставлен во 2-ю наблюдаемую по тому же индексу, что и элемент, который был просто вытащил. Кажется, все работает, за исключением того, что при добавлении элемента из 3-го во второй массив по 1-му индексу он всегда оказывается в конце массива. Я даже добавил оператор if, который будет использовать unshift для борьбы с этим, но, похоже, он не работает. Любая помощь приветствуется. Вот фрагмент кода, в котором я пытаюсь вставить объект в правильный индекс.
self.GetNextItemForClass = function(group, sourceIndex) {
var nextItem = ko.utils.arrayFirst(self.lowPriorityTasks(), function(item) {
if (item == null)
return null;
return item.group() === group;
});
if (nextItem != null) {
var items = self.lowPriorityTasks();
if (sourceIndex == 0) {
self.normalPriorityTasks.unshift(nextItem);
} else {
self.normalPriorityTasks.splice(sourceIndex, 1, nextItem, items[sourceIndex]);
ko.utils.arrayRemoveItem(self.lowPriorityTasks(), nextItem);
}
}
}
У меня есть скрипт здесь, который пытается проиллюстрировать проблему, с которой я столкнулся.