0

私は Dojo dnd バージョン 1.7.2 を使用していますが、通常は非常にうまく機能しています。私は満足しています。

私のアプリは多くのアイテムの配列を保持しています。ユーザーがアイテムをドラッグ アンド ドロップすると、ユーザーが見ているコンテンツを反映するように配列が更新されるようにする必要があります。

これを達成するには、 の頃にコードを実行する必要があると思いますSourceonDndDrop

またはdojo.connectのソースにハンドラーをセットアップするために使用すると、コードの呼び出しが遅すぎるようです。つまり、ハンドラーに渡された には、実際には項目がありません。onDndDroponDropsource

ドラッグされている実際のデータを取得するために呼び出す必要があるため、これは問題です。これsource.getItem(nodes[0].id)により、配列内でそれを見つけ、それらの配列を更新して、ユーザーが行っている変更を反映させることができます。

おそらく私はこれについて間違っていると思います。より良い方法はありますか?

4

2 に答える 2

1

わかりました、私はこれを行うための良い方法を見つけました。別の質問に対するこの回答にヒントが見つかりました: https ://stackoverflow.com/a/1635554/573110

私の成功した一連の呼び出しは基本的に次のとおりです。

var source = new dojo.dnd.Source( element, creationParams );
var dropHandler = function(source,nodes,copy){
  var o = source.getItem(nodes[0].id); // 0 is cool here because singular:true.
  // party on o.data ...
  this.oldDrop(source,nodes,copy);
}
source.oldDrop = source.onDrop;
source.onDrop = dropHandler;

これにより、onDropdropHandler)の新しい実装が、以前にインストールされた実装の直前に呼び出されるようになります。

于 2012-07-11T21:23:56.010 に答える
-1

ちょっと空を撃って、dndSourceのいくつかの異なる実装があると思います。しかし、mouseover / dnddrop 中に呼び出されるイベント / チェック関数について知っておく必要があることがいくつかあります。

1 つのアプローチはcheckAcceptance(source, nodes)、任意のターゲットに合わせてセットアップすることです。次に、現在ドラッグされているノードの参照を保持します。ただし、動的コンテンツを持つ複数のコンテナーがあると、扱いが難しくなります。

をオーバーライドしながらソースをセットアップしcheckAcceptance、既知の (おそらくグローバルな) 変数を使用して追跡します。

var lastReference = null;
var target = dojo.dnd.Source(node, {
    checkAcceptance(source, nodes) : function() {
        // this is called when 'nodes' are attempted dropped - on mouseover
        lastReference = source.getItem(nodes[0].id)
        // returning boolean here will either green-light or deny your drop
        // use fallback (default) behavior like so:
        return this.inhertied(arguments);
    }
});

最適なアプローチはこのようなものかもしれません - ターゲットとソースの両方とノードを手元に置いておきますが、ノードを探すのに適切なスタックを見つける必要があります。イベントと同時に公開されると思います ( onDrop)すでに使用しています:

dojo.subscribe("/dnd/drop", function(source, nodes, copy, target) {
  // figure out your source container id and target dropzone id
  // do stuff with nodes
  var itemId = nodes[0].id
}

dojo.subscribe およびイベントを通じて利用可能なメカニズム/トピックは、ここにリストされています http://dojotoolkit.org/reference-guide/1.7/dojo/dnd.html#manager

于 2012-07-11T08:57:55.913 に答える