Сервер работает на Ruby on Rails. Javascript написан с использованием Coffeescript.
В настоящее время я использую плагин «Дерево файлов jQuery» с плагином «Контекстное меню». Оба работают в данный момент, с одной незначительной проблемой. У меня также включено перетаскивание в дереве файлов, и оно не будет отменено после отпускания левой кнопки мыши. На рисунке ниже мышь уже выпущена.
Мышь вверх, но перетаскивание не отменено
На странице, на которой это загружено, есть один div:
<div id="file_tree"></div>
И этот 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. Однако кажется, что события click, mousedown и mouseup обрабатываются правильно. Кроме того, у контекстного меню нет проблем, и оно не вызовет проблем с перетаскиванием.
Что касается моего поиска исправлений, я ничего не нашел. Плагин «Файловое дерево» содержит много информации, но в контекстном меню, похоже, почти ничего нет (должно быть непопулярно?). И ни у одного из них нет одновременно. Если вам нужна другая информация, пожалуйста, укажите.
EDIT : Я понял, что это на самом деле потому, что плагину нужно вызвать e.stopPropogation () для события mouseup, чтобы предотвратить открытие реального контекстного меню. Кто-нибудь знает, как вручную выполнить событие stopdrag ()? Это не работает, если я назову $ (this) .trigger ('stopdrag'), если вы собираетесь это предложить.