Другой интерфейс для Dojo DND, чем когда отображается элемент - PullRequest
0 голосов
/ 17 ноября 2009

У меня есть набор элементов, которые можно перетаскивать с помощью Dojo DND, эта часть уже реализована, и все работает хорошо. Конкретный вопрос, который у меня возникает, заключается в том, что я хотел бы отображать очень разные данные как с точки зрения содержания, так и визуально, когда элемент перетаскивается, по сравнению с первоначальным видом элемента, что в настоящее время отображается при перетаскивании элемента , Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 17 ноября 2009

Возможно, вы уже нашли решение своей проблемы, но я подумал, что просто добавлю свои $ .02.

Я использовал собственный аватар для перетаскивания для каждого дескриптора перетаскивания (в обычном слове додзё «аватар» - это то, что отображается во время перетаскивания пользователя). Вот прямой фрагмент кода:

for ( var i=0; i<this.cellsTotal; ++i ) {
    // Create the DND source
    var source = new dojo.dnd.Source(
        "drag-handle-container-" + i,
        {copyOnly: true, creator: createAvatar}
    );
    // Add stuff to it
    source.insertNodes(null, [{data: i, type: [this.dnd.classes.handle]}]);
}

createAvatar - это обратный вызов функции, определенный ранее примерно так:

var createAvatar = function(item, mode) {
    var node       = dojo.doc.createElement("span");
    node.id        = dojo.dnd.getUniqueId();
    node.itemIndex = parseInt(item.data);
    dojo.addClass(node, "dojoDndItem");

    // Creating the drag avatar or the source node?
    if ( mode == "avatar" ) {
        // Create the DOM for the avatar (what is shown while dragging)
    } else {
        // Create the DOM for the source node (the handle for drag initiation)
    }

    return {node: node, data: item, type: [context.dnd.classes.avatar]};
};

Ваш метод работает, очевидно, но этот метод освобождает вас от необходимости беспокоиться о переключении стилей, так как Dojo позаботится обо всем за вас.

с .: Я ненавижу Додзё ДНР и его документацию. Мне понадобилось много времени, чтобы понять, когда я должен был сделать это первоначально.

0 голосов
/ 17 ноября 2009

Кажется, легче, чем я думал.

В исходном перетаскиваемом элементе создайте подэлемент с содержимым, которое вы хотите отобразить, и присвойте ему значение css для отображения: нет, затем при перетаскивании присвойте «другим» элементам значение отображения: нет. а для нового элемента значение дисплея: блок.

...