Пример создания компонента SimpleTreeList с режимом перетаскивания

Для выполнения примера в теге HEAD подключите ссылки на библиотеку компонентов PP.js и таблицы визуальных стилей PP.css. В теге BODY добавьте элемент DIV с идентификатором «container». Добавьте картинку, содержащую список пиктограмм вершин.

Подключим скрипт, генерирующий случайные вершины:

<script src="genJson.js" type="text/javascript"></script>

Скрипт genJson.js

В тег <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 возможностью перетаскивания вершин.

См. также:

SimpleTreeList