Для выполнения примера в теге HEAD подключите ссылки на библиотеку компонентов PP.js и таблицы визуальных стилей PP.css. В теге BODY добавьте элемент DIV с идентификатором «container». Добавьте картинку, содержащую список пиктограмм вершин.
Подключим скрипт, генерирующий случайные вершины:
<script src="genJson.js" type="text/javascript"></script>
В тег <script> добавим следующий код:
// Определим события перетаскивания
var onNodeDrag = function (s, a)
{
// Запретим добавление листьям новых потомков
var targetIsFolder = treelist.getNodeChildrenCount(a.TargetNode) > 0,
draggableIsFolder = treelist.getNodeChildrenCount(a.Nodes[0]) > 0;
if (!targetIsFolder)
a.CanTakeChildren = false;
};
var onNodeDragEnd = function (s, a) {
// Выведем в консоль результат перетаскивания
console.log(a); };
var onNodeDragStart = function (s, a) { // Запрещаем перетаскивание последнего потомка var dragNode = a.Nodes[0], dragNodeParent = t.getNodeParent(dragNode); if (dragNodeParent && t.getNodeChildrenCount(dragNodeParent) == 1) a.Cancel = true; // отменяем действие, чтобы вершина оставалась "папкой", т.е. чтобы у нее были дочерние элементы }; // -------------------- // Создадим дерево var json = genJson(500, 100, false, 1234567); // Функция генерирования вершин var t, Tree; t = Tree = new PP.Ui.SimpleTreeList({ DataObject: json, DataMappers: {
Key: 'k',
Index: 'i',
Parent: 'p',
Content: new PP.PropertyMapper({
Getter: function (item) { return item.a.it },
Setter: function (item, value) { item.a.it = value; }
}),
Selected: 's',
Expanded: 'e',
ImageIndex: new PP.PropertyMapper({
Getter: function (item) { return this.getNodeChildrenCount(item.k) ? (item.e ? 1 : 0) : 2 },
Context: t
}),
},
ImageList: imageList = new PP.ImageList({
Source: '../../../build/img/treeIcons.png',
IconHeight: 20,
IconWidth: 20
}),
Width: 580,
Height: 580,
// Зададим настройки перетаскивания
EnableDragAndDrop: true,
DragAndDropMode: 'MultiDrag',
DragAndDropDelay: 200,
DragAndDropIndent: 0,
EnableDragOutside: true,
EnableDropOutside: true,
EnableColumnsMenu: true,
SelectionMode: 'ControlShiftMultiSelect',
ParentNode: 'container',
Captions: [{
Content: 'first',
Width: '40%'
},{
Content: 'second',
Width: '10%'
},{
Content: 'third',
Width: '50%'
}],
NodeDrag: onNodeDrag,
NodeDragStart: onNodeDragStart,
NodeDragEnd: onNodeDragEnd
});
Tree.setSelectedForAll(false);
В результате выполнения примера был создан компонент SimpleTreeList c возможностью перетаскивания вершин.
См. также: