ОК, поэтому я разработал решение, которое выполняет эту работу.
код отмены действительно работает, если он есть в событии "stop" сортируемой функции.Тем не менее, он будет применяться только после завершения «возврата».Проблема в том, что я пытался скопировать / отменить элемент из сбрасываемого события «drop», и это было слишком рано.
Решение состоит в том, чтобы дождаться завершения события «stop» и достичь этогоМне нужно было создать флаг «ожидающая копия», чтобы быть проверенным в событии «стоп».
Вот пример
Это все еще не правильно(UX-мудрый), но он работает правильно, и вы всегда можете установить revert в false на сортируемую функцию, чтобы получить немного лучшее ощущение.
Код из примера выглядит следующим образом ...
var itemCount = 3;
var awaitingCopy = false;
$(init);
function init() {
$("#Items").sortable({
revert: true,
placeholder: "ItemPlaceHolder",
opacity: 0.6,
start: StartDrag,
stop: StopDrag
});
$("#CopyItem").droppable({
hoverClass: "CopyItemActive",
drop: function(event, ui) {
awaitingCopy = true;
}
});
$("#NewItem").click(function(e) {
e.preventDefault();
itemCount++;
var element = $("<div class='Item'>Item " + itemCount + "</div>");
$("#Items").append(element);
element.hide().slideDown(500);
});
}
function CopyItem(element) {
awaitingCopy = false;
var clone = element.clone();
$("#Items").append(clone);
clone.hide().slideDown(500);
}
function StartDrag() {
$("#NewItem").hide();
$("#CopyItem").show();
}
function StopDrag(event, ui) {
if (awaitingCopy) {
$(this).sortable('cancel');
CopyItem($(ui.item));
}
$("#NewItem").show();
$("#CopyItem").hide();
}
В любом случае, надеюсь, это поможет другим, кто хочет такого же эффекта ... но не воровать мой дизайн;)