2016-03-13 48 views
0

我有一個SimplePanel(或div),它的contenteditable屬性設置爲true。在這個面板裏面我有另一個可拖拽div它本身是不可編輯的,但居住在可編輯。爲什麼AttachEvent未被解僱?

擁有一個像

Text text <div draggable="true">DRAG</div> text text. 

作品對我來說,到目前爲止內容。拖拽等工作到目前爲止。但是,如果光標旁邊的拖動div和用戶點擊Backspace鍵刪除可拖動div被刪除過 - 而且只是要清楚這其實是我想要的東西 - 但問題是,我需要知道什麼時候這個元素被刪除,也刪除其相關的DragStartHandler

問題是AttachEvent在這種情況下似乎沒有被解僱 - 或者我這樣做只是錯誤的。我的DragAndDropController實現AttachEvent.Handler以符合處理程序的要求。我爲每個可拖動的Widget添加它,但我從不會看到任何日誌記錄輸出,因爲我期望。

這是我目前的解決方案:

public class DragAndDropController implements AttachEvent.Handler { 

    private SimplePanel textarea; 

    private Element currentlyDragged; 

    public DragAndDropController(SimplePanel textarea) {   
     this.textarea = textarea;  
     // ... 
    } 

    public void addDraggable(Widget draggable) { 

     DragStartHandler dragStartHandler = new DragStartHandler() { 
      @Override 
      public void onDragStart(DragStartEvent event) { 
       GWT.log("Drag start for .." + draggable.getElement().getId());    
       currentlyDragged = draggable.getElement();    
       event.setData("text", draggable.getElement().getId()); 
       event.getDataTransfer().setData("text", draggable.getElement().getId()); 
      }   
     }; 

     // The handler I plan to remove .. 
     final HandlerRegistration addBitlessDomHandler = this.textarea.addBitlessDomHandler(dragStartHandler, DragStartEvent.getType()); 

     draggable.addAttachHandler(this); 
    } 

    @Override 
    public void onAttachOrDetach(AttachEvent event) { 
     GWT.log("DETACH"); 
    } 

    // .. 
} 

我希望有人能澄清。 Devtool向我展示受影響的div從DOM樹中移除(至少它的HTML內容消失了,所以我認爲我可以做出這個假設)。

回答

1

沒有任何代碼顯示Widget draggable被添加到父窗口小部件,所以它不清楚附加/分離接線是否可以按預期工作。如果你只是打電話element.appendChild(widget.getElement()),這將正確地將dom元素附加到頁面上,但而不是通知小部件(或其包含或訂閱了它的任何東西)它已正確連接。

簡而言之,僅僅是可見的(或不可見的)是不足以知道小部件被正確地連接/分離。確保小部件連接到另一個小部件(依此類推,直到RootPanel)。