0

数時間試してグーグルで調べた後、答えのない質問を受けました:(

3 つの dojo.dnd.Source コンポーネントを作成しました。ユーザーをプロジェクトに結合するために使用されるため、左側にプロジェクトがあり、右側にユーザ​​ーがあり、中央にキャンバスがあります。関連するクリエーターとチェック受け入れ機能を設定しましたが、すべて問題ありません。

ユーザーは中央のキャンバスにプロジェクトをドロップできます。このプロジェクトは、関連するすべてのユーザーを div 要素として含む div として表示されます。ドロップできるもう 1 つの dndtype はユーザー タイプです。その場合、キャンバスを空にして、ドロップしたユーザーが関連するすべてのプロジェクトを表示します。プロジェクトまたはユーザーをキャンバスにドロップするとすぐに、作成者関数が呼び出されます。問題は、クリエーター関数がドロップする必要がある 1 つの要素を返すことです。ユーザーをドロップすると、キャンバスに複数の要素を描画する必要があるため、クリエーター メソッドは 1 つの要素のみを返すため、これを完全にカバーしていません。

デフォルトの動作に対処するために、プロジェクトをキャンバスに手動で追加して 1 つだけを返そうとしましたが、きれいではないことはわかっています:S 動作していますが、キャンバス上でプロジェクトを移動すると、奇妙な動作に直面します。プロジェクトではなくユーザーとして扱われます。

要するに、1 つのアイテムをドロップして複数のアイテムを作成する方法を皆さんが知っている方法はありますか。私はドロップイベントを自分でトリガーしようと探していましたが、役に立ちませんでした。

ありがとう!

4

1 に答える 1

0

探しているイベントは、Source の onDrop イベントです。使用できるその他のイベントについては、API ドキュメントを確認してください。ストア内およびストア間で使用する onDropExternal および onDropInternal があります。

require(["dojo/dnd/Source"], function(Source){
  var source = new Source({
     onDrop = function(source, nodes, copy)  {
       //called only on the current target, when drop is performed
       this.inherited(arguments); //execute the default onDrop function  
       //now add the node(s) to the other stores here
       //you might be able to just do something like: 
       source2.insertNodes(nodes);//but this is untested ;)
     }
  });
});
于 2012-11-01T02:49:36.253 に答える