По умолчанию Tree поддерживает внутренний и внешний драг'н'дроп.
Чтобы использовать возможности драг'н'дроп в дереве, необходимо задать значение true параметру drag:
Включение драг'н'дроп в дереве
webix.ui({
view:"tree",
drag:true
});
Related sample: Enabling Drag-and-Drop in Tree
Режим, при котором элементы можно перетаскивать за пределы дерева:
webix.ui({
view:"tree",
drag:"move"
});
Related sample: The 'move' DnD Mode
Работает так же как и "move", но при этом элементы нельзя перетаскивать за пределы дерева. Во время перетаскивания элемента другие узлы перестраиваются автоматически.
Чтобы включить режим "order", необходимо задать соответствующее значение параметру drag:
Режим "order" включён
webix.ui({
view:"tree",
drag:"order"
});
Related sample: The "order" Drag-and-Drop Mode
Предположим, что на странице есть несколько деревьев. Одни из них можно определить как источник д-н-д (откуда перетаскивать элементы), а другие как целевые (куда перетаскивать элементы).
Использование режима "source-target"
// вы можете перетаскивать элементы только из treeA в treeB.
// Перетаскивание внутри treeA недоступно. Перетаскивание из treeB в treeA недоступно.
webix.ui({
id:"treeA",
view:"tree",
drag:"source"
});
webix.ui({
id:"treeB",
view:"tree",
drag:"target"
});
Related sample: Custom Dropping Behaviour
В большинстве случаев информации об общем использовании достаточно.
Этот раздел рассказывает о том, как настроить своё поведение для драг'н'дроп.
Ключевые моменты:
Изменить текст элементов при драге можно с помощью события the onBeforeDrag.
Желаемый темплейт настраивается через свойство context.html и может содержать в себе любой HTML.
Пользовательский текст для элементов при драге
tree.attachEvent("onBeforeDrag", function(context, ev){
context.html = " "+context.source.length+" item(s)";
});
Related sample: Custom Text of Dragged Items
Отключить драг некоторых элементов можно с помощью события onBeforeDrag. Необходимо вернуть false всякий раз, когда вы хотите заблокировать действие.
Блок драга
tree.attachEvent("onBeforeDrag", function(context, ev){
if (tree.getItem(context.source).$level == 2){
return true; // позволяет перетаскивать элементы только
// второго уровня
}
return false; // блокирует драг в любом другом случае
});
При каждой попытке д-н-д проверяется уровень элемента. Если уровень равен 2, то элемент можно перетаскивать.
Настроить поведение при дропе элементов можно с помощью события onBeforeDrop.
Предположим, вы хотите чтобы элементы вели себя следующим образом:
Изменение поведения при дропе
tree.attachEvent("onBeforeDrop", function(context, ev){
if (this.getItem(context.target).$count && this.getItem(context.target).open){
// дроп как дочернего элемента
context.parent = context.target;
context.index = 0;
} else {
// дроп как соседнего элемента
context.index++;
}
});
Related sample: Custom Dropping Behaviour
Related sample: Custom Dropping Behaviour. Denying Dropping
В большинстве случаев в обращении к событиям нет необходимости. Tree работает со всеми операциями самостоятельно. События полезны только в том случае, если вы хотите изменить поведения по умолчанию.
События д-н-д:
Предположим, у вас есть два дерева и вы перетаскиваете элемент с одного в другое:
Порядок событий: