Сервер работает с Ruby on Rails. Javascript написан с использованием Coffeescript.Использование плагина contextMenu с плагином fileTree без потери поддержки перетаскивания
В настоящее время я использую плагин jQuery File Tree с плагином контекстного меню. Оба работают в настоящий момент с одной незначительной проблемой. У меня также есть draggable включен в дереве файлов, и он не будет отменен после отпускания левого клика. На рисунке ниже мышь уже выпущена.
Mouse up but draggable hasn't cancelled
страница это загружается на есть один DIV:
<div id="file_tree"></div>
И это ДИВ заполняется другой страницы из другого контроллера. Код:
<ul class="jqueryFileTree" style="display: none;">
<% @contents[0].each do |directory| %>
<li class="directory collapsed"><a href="#" rel="<%= @root + directory %>/"><%= directory %></a></li>
<% end %>
<% @contents[1].each do |file| %>
<li class="file ext_<%= File.extname(file)[1..-1] %>"><a href="#" rel="<%= @root + file %>"><%= file %></a></li>
<% end %>
</ul>
Эта страница также загружает перетаскиваемую код:
$ ->
@settings =
revert: true
helper: "clone"
containment: "#file_tree"
axis: "y"
scroll: true
cursorAt:
top: -2
$(".directory").draggable(@settings)
$(".file").draggable(@settings)
и контекстное меню добавляется как это:
$("#file_tree").contextMenu { menu: 'filetree_context_menu' }, (action, element, position) =>
@on_context_menu(action, element, position, data.root_directory)
Где @on_context_menu это просто функция (он не имеет никакого отношения к этой проблеме).
Проблема может быть остановлена (клон возвращается к исходному), если вы нажмете вне div #file_tree. Тем не менее, похоже, что операции щелчка, мыши и мыши автоматически обрабатываются. Кроме того, контекстное меню не имеет проблем и не вызовет проблемы с перетаскиванием.
Что касается моих поисков исправлений, я ничего не нашел. Плагин File Tree имеет достаточное количество информации, плавающей вокруг, но в Контекстном меню, кажется, почти ничего (должно быть непопулярно?). И никто из них не имеет одновременно. Если вам нужна другая информация, пожалуйста, укажите.
EDIT: Я понял, что это на самом деле потому, что плагин должен вызвать e.stopPropogation() в событии mouseup, чтобы он не открывал реальное контекстное меню. Кто-нибудь знает, как вручную выполнить событие stopdrag()? Он не работает, если я вызову $ (this) .trigger ('stopdrag'), если вы собираетесь это предложить.