SortableJS предоставляет мощные возможности для реализации
перетаскивания элементов между списками. Ключевыми
инструментами для управления обменом элементов между списками являются
параметры pull и put. Эти параметры
используются внутри объекта group, который задаётся при
инициализации экземпляра Sortable.
group и его
свойстваnew Sortable(listElement, {
group: {
name: 'shared',
pull: true,
put: false
}
});
name — уникальное имя группы,
определяющее, какие списки могут обмениваться элементами.pull — управляет возможностью
вытягивания элемента из этого списка в другой.put — управляет возможностью
вставки элементов из других списков в этот список.Оба свойства могут принимать несколько типов значений:
Булевы значения:
true — разрешает действие.false — запрещает действие.Строки — имя группы, из которой разрешён
pull или в которую разрешён put.
Функции — динамически определяют разрешение
действия, принимая объект to (список назначения) или
from (список источника).
pullpull определяет, могут ли элементы быть вытащены
из данного списка. Возможные варианты:
pull: true — любой элемент может быть перемещён в
другой список, принадлежащий той же группе.pull: false — элементы из списка нельзя перемещать в
другие списки.pull: 'clone' — элемент не удаляется из исходного
списка, а создаётся его копия в списке назначения.pull: function (to, from, dragElement) {
return dragElement.dataset.type === 'draggable';
}
Здесь элемент может быть перемещён только если его атрибут
data-type равен "draggable".
putput управляет тем, можно ли вставлять элементы в
этот список из других списков. Варианты:
put: true — все элементы из групп с одинаковым именем
могут быть вставлены.put: false — вставка запрещена.put: ['groupA', 'groupB']
put: function (to, from, dragElement) {
return dragElement.classList.contains('allow-drop');
}
Элемент вставляется только если он имеет класс
allow-drop.
pull и
putКомбинация pull и put задаёт полный
контроль над обменом элементов между списками. Важные
закономерности:
pull из исходного списка и разрешать
put в целевом списке.pull настроен на 'clone', элемент
создаётся копией, исходный остаётся на месте.pull и
put для управления сложными сценариями сортировки.Пример сложного взаимодействия:
Sortable.create(listA, {
group: {
name: 'shared',
pull: 'clone',
put: false
}
});
Sortable.create(listB, {
group: {
name: 'shared',
pull: true,
put: ['shared']
}
});
listA можно копировать в
listB, но нельзя удалить их из listA.listB можно перемещать в другие списки группы
shared.Копирование шаблонов элементов
pull: 'clone' полезен для библиотек компонентов или
шаблонов, когда исходный элемент нужно оставить неизменным.
Ограничение вставки Использование
put с массивом имён групп позволяет контролировать,
какие списки могут принимать элементы. Это особенно актуально
для административных панелей с несколькими категориями.
Динамическая фильтрация Функции в
pull и put дают возможность реализовать
правила на основе типа элемента, его атрибутов или состояния
списка, создавая гибкую систему разрешений.
Разделение списков на источники и приёмники
Можно настроить один список как только источник
(pull: 'clone', put: false), а другой — как
только приёмник (pull: false,
put: true), обеспечивая строгую модель
перетаскивания.
pull: 'clone' с ленивой генерацией DOM,
чтобы уменьшить нагрузку на страницу.pull: 'clone' помогает
пользователю понять, что элемент копируется, а не перемещается.Использование pull и put превращает
SortableJS в гибкий инструмент для организации сортируемых
интерфейсов, конструкторов, драг-н-дроп редакторов и систем управления
контентом, обеспечивая полный контроль над поведением элементов
между списками.