1

サーバーはRubyonRailsで実行されています。JavascriptはCoffeescriptを使用して書かれています。

現在、コンテキストメニュープラグインでjQueryファイルツリープラグインを使用しています。両方とも現在機能していますが、1つの小さな問題があります。また、ファイルツリーでドラッグ可能を有効にしていますが、左クリックを離してもキャンセルされません。下の写真では、マウスはすでに解放されています。

マウスを上に向けますが、ドラッグ可能はキャンセルされていません

これがロードされるページには、1つの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')を呼び出すと、機能しません。

4

1 に答える 1

0

最終的にこの問題を修正しました(かなりの時間が経ち、タンブルウィードを手に入れるために先延ばしになりました)。両方のクリックでe.stopPropagation()を実行することでドラッグが壊れていたため、クリックされたのが正しいボタンであるというチェックを追加しました。私が廃棄した元の回避策よりもはるかにクリーンです。

if(e.button == 2) {
  e.stopPropagation();
}
于 2012-03-30T20:17:20.190 に答える