1

服务器正在运行Ruby on Rails。 Javascript是使用Coffeescript编写的。使用contextMenu插件和fileTree插件,不会丢失可拖动的支持

我目前使用带有上下文菜单插件的jQuery文件树插件。目前两者都在工作,只有一个小问题。我也在文件树中启用了可拖动的功能,并且在释放左键单击后它不会取消。在下图中,鼠标已经释放。

Mouse up but draggable hasn't cancelled

这是上加载的页面有一个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是一个简单的函数(它虽然没有关系到这个问题)。

如果您在#file_tree div外部单击,则可以停止该问题(克隆会恢复其原始状态)。但是,似乎click,mousedown和mouseup事件处理正确。此外,上下文菜单没有问题,不会引发可拖动的问题。

关于我寻找修复,我什么也没找到。文件树插件有一个很好的信息量,但上下文菜单似乎没有任何东西(必须不受欢迎?)。没有一个在同一时间。如果您需要其他信息,请说明。

编辑:我发现这实际上是因为插件需要在mouseup事件中调用e.stopPropogation()以防止它打开真正的上下文菜单。任何人都知道如何手动执行stopdrag()事件?如果我打电话给$(this).trigger('stopdrag'),如果你打算这么做,它就不起作用。

回答

0

最终解决了这个问题(经过了一段时间,并拖延得到Tumbleweed)。只是添加了一个检查,它是被点击的右键,因为它通过在两个点击上运行e.stopPropagation()来破坏拖动。它比我原来的废弃物更清洁。

if(e.button == 2) { 
    e.stopPropagation(); 
}