Frage

Ich habe einen draggable mit einem benutzerdefinierten helper . Manchmal ist der Helfer ein Klon und manchmal ist es das ursprüngliche Element.

Das Problem ist, dass, wenn der Helfer ist das ursprüngliche Element und ist nicht fiel auf einen gültigen abwerfbaren es entfernt wird. Meine Lösung sieht wie folgt aus so weit:

in meinem on_dropped Rückruf stelle ich ui.helper.dropped_on_droppable true;

In der stop Rückruf des ziehbar, ich für diese Variable überprüfen und dann ... was soll ich tun?

$('.my_draggable').draggable({
    stop   : function(e, ui) {
        if (!ui.helper.dropped_on_droppable) {
            /* what do I do here? */
        }
    },

Ist das auch der richtige Ansatz?

War es hilfreich?

Lösung

Ok, fand ich eine Lösung! Es ist hässlich und es bricht die ‚Regeln der Kapselung‘, aber zumindest hat es den Job.

Denken Sie daran, dies nur für Sonderfälle ist ! jQuery kann seine eigenen Helfer Entfernung ganz gut handhaben. In meinem Fall hatte ich einen Helfer, der manchmal das ursprüngliche Element und manchmal einen Klon war, so war es nicht immer sinnvoll, die Helfer nach dem Zurücksetzen.

löschen
element.draggable({
    stop   : function(e, ui) {
        /* "dropped_on_droppable" is custom and set in my custom drop method
           ".moved_draggable" is custom and set in my custom drag method, 
                     to differentiate between the two types of draggables
        */               
        if (!ui.helper.dropped_on_droppable & ui.helper.hasClass('moved_draggable')) {
            /* this is the big hack that breaks encapsulation */
            $.ui.ddmanager.current.cancelHelperRemoval = true;
        }
    },

Achtung: Das bricht Verkapselung und nicht vorwärts kompatibel sein

Andere Tipps

Ich könnte hier etwas fehlt, aber es ist nicht einfach ein Fall der Zugabe

revert: "invalid"

zu den Optionen des ziehbar, wenn die ziehbar eines ursprünglichen Elements, kein Klon?

Ich verwende einen benutzerdefinierten Helfer, die mit Mehrfachauswahl draggables in eine einzigen div Aggregate. Dies scheint nicht mit der revert Funktionalität Jive so dass ich mit dieser Regelung kam. Die Elemente werden in die ursprünglichen Mutter manuell angehängt zurück, die I verfolgt, über .data ().

.draggable({
    helper: function() {
        var div = $(document.createElement('div'))
            .data('lastParent', $(this).parent());
        return div;
    },
    start: function() {
        //... add multiple selection items to the helper..          
    },
    stop: function(event,ui) {
        $( $(ui.helper).data('lastParent') ).append( $(ui.helper).children() );
    }
}

Dieser Ansatz auf der hübschen Animation nicht verliert, aber es kann Sie oder jemand anderes mit diesem Thema nützlich sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top