デフォルトでは、dojo.dnd.Source コンテナーを使用すると、Ctrl キーを押したままにして、ドラッグしたアイテムを単に移動するだけでなく、複製/コピーすることができます。
singular=true を設定して複数のアイテムのドラッグを停止できることは知っていますが、コピーを停止するにはどうすればよいですか? アイテムの複製は、アイテムのコンテキストでは意味がありません (Web サイト メニューでページを並べ替えるためのドラッグ可能なリストを作成しています)。
ありがとう
デフォルトでは、dojo.dnd.Source コンテナーを使用すると、Ctrl キーを押したままにして、ドラッグしたアイテムを単に移動するだけでなく、複製/コピーすることができます。
singular=true を設定して複数のアイテムのドラッグを停止できることは知っていますが、コピーを停止するにはどうすればよいですか? アイテムの複製は、アイテムのコンテキストでは意味がありません (Web サイト メニューでページを並べ替えるためのドラッグ可能なリストを作成しています)。
ありがとう
より良い方法があるかどうかはわかりませんが、私は常にcopyState
Source インスタンスのメソッドを壊して常に を返すようにすることでこれを達成してきましたfalse
。
ページに複数のソースがある場合は、dojo.declare
オーバーライドされたメソッドを持つサブクラスを選択するか、dojo.extend
dojo.dnd.Source
それ自体を選択してすべてのインスタンスでメソッドを上書きすることもできます。
または2番目のオプション
dojo.addOnLoad(function(){
//Disable the key events Ctrl and Shift
dojo.extend( dojo.dnd.Source, { copyState: function( keyPressed, self ){
return false; }}
);
//Create the dnd source object for data point column bar
columnBar = new dojo.dnd.Source("viewColumnBar",{ singular: true });
});
Ken Franquiero のおかげで、この問題を解決することができました。同じ船に乗っている他の人のために、ここに私のコードがあります:
/**
* Extend dojo.dnd.Source to prevent copying
*/
dojo.require( 'dojo.dnd.Source' );
dojo.addOnLoad( function() {
dojo.declare
(
'EditPosition',
dojo.dnd.Source,
{
copyState: function( keyPressed, self )
{
return false;
}
}
);
oEditPosition = new EditPosition
(
'position_container',
{
withHandles: 'true'
}
);
} );
HTML:
<div id="position_container">
<div class="dojoDndItem">
<div class="dojoDndHandle drag_icon drag_handle"></div> <strong>Short Paragraphs</strong>
</div>
<div class="dojoDndItem">
<div class="drag_icon fixed_handle"></div> About Us
</div>
<div class="dojoDndItem">
<div class="drag_icon fixed_handle"></div> Team Members
</div>
</div>