4

私はdraggableカスタムを持っていますhelper。ヘルパーがクローンである場合もあれば、元の要素である場合もあります。

問題は、ヘルパーが元の要素であり、有効なドロップ可能オブジェクトにドロップされない場合、ヘルパーが削除されることです。私の解決策はこれまでのところ次のようになっています。

コールバックで;on_droppedに設定ui.helper.dropped_on_droppableしました。true

ドラッグ可能なもののstopコールバックで、その変数をチェックしてから...どうすればよいですか?

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

これも正しいアプローチですか?

4

3 に答える 3

2

わかりました、解決策を見つけました!それは醜く、「カプセル化の規則」に違反しますが、少なくとも機能します。

これは特別な場合にのみ使用されることを忘れないでください。jQuery は、独自のヘルパーの削除を問題なく処理できます。私の場合、元の要素であるヘルパーとクローンであるヘルパーがあったため、元に戻した後にヘルパーを削除することが常に適切であるとは限りませんでした。

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;
        }
    },

警告: これはカプセル化を壊し、前方互換性がない可能性があります

于 2008-10-20T09:34:33.047 に答える
0

複数選択のドラッグ可能なものを 1 つの div に集約するカスタム ヘルパーを使用します。これは元に戻す機能とは合わないように見えるので、このスキームを思いつきました。要素は手動で元の親に追加され、.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() );
    }
}

このアプローチはきれいなアニメーションを失いますが、この問題を抱えているあなたや他の誰かにとって役立つかもしれません.

于 2009-06-01T19:28:38.070 に答える
0

ここで何かが欠けているかもしれませんが、単に追加するだけの場合ではありません

revert: "invalid"

ドラッグ可能要素がクローンではなく元の要素である場合、ドラッグ可能要素のオプションに?

于 2008-10-17T15:21:22.393 に答える