2011-01-04 8 views
5

기본적으로 dojo.dnd.Source 컨테이너를 사용하면 끌기 된 항목을 이동하는 대신 Ctrl 키를 누른 채로 복사/복사 할 수 있습니다.dojo.dnd에서 복사 사용 안함

여러 항목을 드래그하는 것을 중지하려면 singular = true를 설정할 수 있지만 복사를 중지하려면 어떻게해야합니까? 항목을 복제하는 것은 내 항목의 컨텍스트에서 의미가 없습니다 (웹 사이트 메뉴에서 페이지 순서를 변경할 수있는 목록을 만들고 있습니다).

감사

답변

6

더 좋은 방법이 있다면 확실 해요,하지만 난 항상 항상 false를 반환하는 소스 인스턴스에 copyState 방법을 건드리지하여이 작업을 수행했습니다.

페이지에 여러 소스가있는 경우 메서드 오버라이드 된 하위 클래스 dojo.declare 또는 모든 인스턴스에서 메서드를 클리핑하기 위해 dojo.extenddojo.dnd.Source 자체를 선택할 수도 있습니다.

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

});