Der Server läuft Ruby on Rails. Javascript wird mit Coffeescript geschrieben.Verwenden von contextMenu Plugin mit FileTree-Plugin ohne zu verlieren ziehbare Unterstützung
Ich verwende derzeit das jQuery File Tree Plugin mit dem Kontextmenü-Plugin. Beide arbeiten momentan mit einem kleinen Problem. Ich habe auch ziehbare aktiviert in der Dateistruktur und es wird nicht abgebrochen, nachdem der linke Klick freigegeben wurde. Im Bild unten wurde die Maus bereits freigegeben.
Mouse up but draggable hasn't cancelled
Die Seite dieses auf ein div hat geladen ist:
<div id="file_tree"></div>
Und dieses div von einer anderen Seite von einem anderen Controller gefüllt ist. Der Code ist:
<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>
Diese Seite gibt es auch die ziehbar Code lädt:
$ ->
@settings =
revert: true
helper: "clone"
containment: "#file_tree"
axis: "y"
scroll: true
cursorAt:
top: -2
$(".directory").draggable(@settings)
$(".file").draggable(@settings)
Und das Kontextmenü wird wie folgt hinzugefügt:
$("#file_tree").contextMenu { menu: 'filetree_context_menu' }, (action, element, position) =>
@on_context_menu(action, element, position, data.root_directory)
Wo @on_context_menu ist einfach eine Funktion (es hat jedoch keine Auswirkungen auf dieses Problem).
Das Problem kann beendet werden (der Klon kehrt zum Original zurück), wenn Sie außerhalb des #file_tree div klicken. Es scheint jedoch, dass Click-, Mouse-Down- und Mouse-Up-Ereignisse korrekt behandelt werden. Außerdem hat das Kontext-Menü keine Probleme und löst das ziehbare Problem nicht aus.
In Bezug auf meine Suche nach Korrekturen habe ich nichts gefunden. Das Dateibaum-Plugin hat eine gute Menge an Informationen, die herumschweben, aber das Kontextmenü scheint so gut wie nichts zu haben (muss unpopulär sein?). Und keiner von denen hat beide zur gleichen Zeit. Wenn Sie weitere Informationen benötigen, geben Sie dies bitte an.
BEARBEITEN: Ich fand heraus, dass dies tatsächlich ist, weil das Plugin e.stopPropogation() auf dem MouseUp-Ereignis aufrufen muss, um zu verhindern, dass es ein echtes Kontextmenü öffnet. Kann jemand manuell ein stopdrag() Ereignis durchführen? Es funktioniert nicht, wenn ich $ (this) .trigger ('stopdrag') anrufe, falls Sie das vorschlagen würden.