Dojo.dnd を使用して、エリア間でアイテムを転送しています。問題は、アイテムをドロップすると所定の位置にスナップされますが、アイテムをドロップした場所にとどめておきたいのですが、1 つの領域だけです。
これをよりよく説明するための小さなコードを次に示します。
<div id="dropZone" class="dropZone">
<div id="itemNodes"></div>
<div id="targetZone" dojoType="dojo.dnd.Source"></div>
</div>
dojo.dnd.Source
「dropZone」は、「itemNodes」(プログラムで作成) と「targetZone」の2 つの領域を含む DIV です。アイテム (画像を含む DIV) は、単純なリストから「itemNodes」から「targetZone」にドラッグし、ドロップされた場所に留まる必要があります。それらが「targetZone」からドラッグされるとすぐに、「itemNodes」内のリストにスナップバックする必要があります。
アイテムの作成に使用するコードは次のとおりです。
var nodelist = new dojo.dnd.Source("itemNodes");
{Smarty-Loop}
nodelist.insertNodes(false, ['<img class="dragItem" src="{$items->info.itemtext}" alt="{$items->info.itemtext}" border="0" />']);
{/Smarty-Loop}
しかし、この方法ではアイテムのリストが 2 つしかないため、「targetZone」にドロップされたアイテムは、ドロップした場所にとどまりません。dojo.query(".dojoDndItem").forEach(function(node)
すべてのアイテムを取得して「可動」タイプに変更するループを試しました。
- を使用
dojo.dnd.move.constrainedMoveable
するとアイテムが変更され、いつでも移動できるようになります (「itemNodes」でも)。 - 「ボックス」を使用し
dojo.dnd.move.boxConstrainedMoveable
て「targetZone」の境界に定義すると、「targetZone」内でアイテムを移動するだけで済みますが、アイテムをドロップするとすぐに、アイテムをつかんで元に戻すことができません。(奇妙な:dojo.connect(node, "onMoved"
ここでは機能しません。イベントは何があっても発火しません。)
ここで質問があります。項目を前後に移動できる 2 つの dnd.Sources を作成し、項目を一方のソースでのみ「移動可能」にすることは可能ですか?
または、アイテムを移動可能にするなどの回避策はありますか?それらが「targetZone」にドロップされていない場合、それらは「itemNodes」のリストに自動的に戻されますか?
ページが送信されたら、「targetZone」に配置されたすべてのアイテムの位置を保存する必要があります。(次のステップは、グリッドが既に満たされている場合、ページの読み込み時に「targetZone」内にアイテムを配置することですが、最初から機能させることができれば幸いです。)
どんなヒントでも大歓迎です。
こんにちは、Select0r