HTML5 подарил нативный драг-н-дроп, который можно использовать для компонентов Webix. Здесь мы поговорим о том, как перемещать HTML узлы в Webix Datatable, используя HTML5 драг-н-дроп
Related sample: HTML5 Drag-and-Drop Handling
Сперва создадим необходимые HTML узлы (зд. цветные дивы под таблицей) и сделаем их перетаскиваемыми с помощью свойства draggable. Также нужно добавить функцию, которая будет срабатывать в начале перемещения:
<div id="divA" draggable="true" ondragstart="drag(event)" > A </div>
И разрешаем драг-н-дроп в обоих направлениях (из и в) в пределах таблицы:
view:"datatable",
// конфиг таблицы
drag:true
После этого необходимо определить, какие данные нам нужны. В HTML5 данные перемещаются с помощью объекта dataTransfer. Неожиданно, правда? Нам понадобятся следующие его методы:
Из HTML узлов получим их текстовые значения (innerHTML);
function drag(ev){
ev.dataTransfer.setData("title",ev.target.innerHTML);
}
Когда мы отпускаем перетаскиваемый узел над целевой областью, мы получаем данные из DataTransfer и парсим их в элемент.
События HTML5 обрабатываются с помощью метода event, который принимает узел oили его ID, тип события, обработчик события и объект "this" в качестве параметров. Имена событий передаются без префикса on:
webix.event(mygrid.$view, "drop", function(e){
var grid = $$(e); //e - id бросаемого элемента
var id = grid.locate(e); // возвращает ID целевого элемента в таблице
grid.getItem(id).title = e.dataTransfer.getData("title"); // задаём название
grid.refresh(id); // показываем изменения
});
В то же время нам нужно заблокировать поведение по умолчанию, если мы хотим, чтобы HTML узлы сохраняли свою позицию (на самом деле происходит копирование значений innerHTML):
webix.event(mygrid.$view, "dragover", function(e){ e.preventDefault(); });
Изучить HTML5 драг-н-дроп можно тут (Mozilla Developer Network).
Наверх