2011-01-04 5 views
5

デフォルトでは、dojo.dnd.Sourceコンテナを使用すると、ドラッグしたアイテムを移動するのではなく、Ctrlキーを押しながら複製/コピーすることができます。dojo.dndでのコピーの無効化

複数のアイテムをドラッグするのを停止するにはsingular = trueを設定できますが、コピーを停止するにはどうすればよいですか?アイテムを複製することは、私のアイテムの文脈では意味をなさない(私は、ウェブサイトメニューのページを並べ替えるためのドラッグ可能なリストを作っている)。

おかげ

答えて

6

よりよい方法がある場合、私はわからないんだけど、私はいつもいつもfalseを返すために、ソース・インスタンス上copyState方法をつかうことによって、これを達成しました。あなたがページ上のいくつかのソースを持っていれば

、あなたはまた、すべてのインスタンスでメソッドを壊しする方法上書き、またはdojo.extenddojo.dnd.Source自体でdojo.declareサブクラスに選ぶことができます。

+1

ちなみに、これが正式に承認された方法です。 ;-) –

2

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> 
6

または第二のオプション

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 }); 

}); 
関連する問題