5

望ましい動作:

ユーザーが項目をツリーにドラッグします。閉じたノードにカーソルを合わせると、ノードが展開され、子が表示されます。この時点で、ユーザーは引き続き子ノードにドラッグして、それらのいずれかにドロップできます。

これはうまくいきました。ドロップ可能オブジェクトの「over」オプションを使用して、ノードを展開し、子をドロップ可能にします。

しかし、さらに機能を追加する必要がありました。最初に、ドラッグ可能なヘルパーを追加しました。まだ正常に動作しています。次に、ドラッグ可能オブジェクトとドロップ可能オブジェクトを 2 つの異なるコンテナー (div) に入れます。この時点で、ヘルパーはコンテナーからドラッグしません。解決策は、ドラッグ可能オブジェクトに「appendTo: 'body'」を設定することでした。すべて良い...まあ、そうではありません。

これで、現在のドラッグ操作中に子ノードをドロップできなくなりました。ユーザーは、現在のドラッグを解放し、目的の子ノードに再ドラッグする必要があります。appendTo オプションを削除すると問題は解決しますが、ヘルパーはドロップ可能なコンテナーに視覚的に移動しません。

これらの新しいドロップ可能アイテムを「起動」して、すぐにドロップ可能にする方法はありますか?

4

1 に答える 1

6

これにより、ほぼ同じ問題が解決されました。私の場合、ドラッグ可能なものをドラッグしているときにノードを開いて切り替えると、子アイテムが ajax を介して読み込まれ、ドロップ可能なものとして初期化されます。次に、これを行う必要があります。

ui.draggable.draggable('option', 'refreshPositions', true);
var tempFunc = function() {
    if (ui.draggable) {
        ui.draggable.off('drag', tempFunc);
        setTimeout(function() {
            ui.draggable.draggable('option', 'refreshPositions', false);
        }, 100);
    }
};
ui.draggable.on('drag', tempFunc);

これにより、新しいドロップ可能オブジェクトが現在のドラッグに参加するのに十分な長さで、ドラッグ可能なものにrefreshPositionsオプションが設定されます。ドラッグ中にオプションを使用trueすることもできますが、パフォーマンスが低下するため、望ましくありません。refreshPositionstrue

別の方法でそれを行う方法が見つかりませんでした。位置を更新するためだけにドラッグ中に呼び出せるメソッドがあれば最高ですが、ありません。

于 2012-10-18T06:03:18.973 に答える