2016-03-14 44 views
0

我正在建立一個文件瀏覽器,用戶有能力拖放文件夾來移動它們。每個用戶都有一些允許他們修改文件夾結構的權限。當用戶拖動文件夾移動文件夾,但沒有更改該特定文件夾結構的權限時,會顯示圖標以通知用戶該操作無效。jQuery拖動事件正在以不同的順序發起基於方向

當文件夾被拖動到文件夾樹中時正顯示圖標,但當文件夾被拖動時不會顯示該圖標。

我注意到這是由dropout的順序造成的,而dropover事件是基於拖動方向切換的。拖下來時,首先是丟失,然後是拖延。當拖動訂單時逆轉。這會導致在dropout函數中刪除拖放函數中應用的類。

有沒有一種方法可以確保dropover在啓動前啓動?

這裏是事件處理程序

ko.bindingHandlers.dropTarget = { 
    init: function (element, valueAccessor, allBindings) { 
     var $el = $(element); 
     var eligibilityHandler = allBindings.get("canDrop"); 

     $el.on("dropover", function (event, ui) { 
      if (!eligibilityHandler(ko.dataFor(element), ko.dataFor(ui.draggable[0]))) { 
       $el.addClass('invalid-drop-target'); 
       $(ui.helper).addClass('invalid-drag-target'); 
      } else { 
       $el.addClass('valid-drop-target'); 
       $(ui.helper).addClass('valid-drag-target'); 
      } 
     }); 
     $el.on("dropout", function (event, ui) { 
      $el.removeClass('invalid-drop-target'); 
      $(ui.helper).removeClass('invalid-drag-target'); 
      $el.removeClass('valid-drop-target'); 
      $(ui.helper).removeClass('valid-drag-target'); 
     }); 
    } 
} 

回答

0

從理論上講,你應該做的:

  1. 確保你要去的地方拖動文件夾不夾daughter're拖動。

  2. 要拖動文件夾,您檢查目標文件夾的ID和 將其設置爲您要拖動的文件夾的父文件夾。

ajax筆芯,你已經更新了樹的新結構。

以上內容適用於在任何類型的樹中移動文件夾位置。