2

シューズのイベントを削除する方法はありますか?多くのWebサイトや参照を検索しましたが、イベントを削除する方法が見つかりません...独自のイベントマネージャーを作成する必要があることを気にしています...本当に必要ですか?または、イベントリスナーをアタッチ解除する方法はありますか?

4

4 に答える 4

1

どのキーバインドを削除しますか? Shoes アプリのすべてのイベントですか、それともデフォルトのバインディングだけですか?

「alt-/」、「alt-.」、「alt-?」などの靴用に予約されているバインディングをオーバーライドする場合は、次のコードをアプリケーション コードを含むファイルに貼り付けます。

class Shoes::App
  def Shoes.show_log # gets called on alt-/
  end

  def Shoes.show_manual # gets called on alt-?
  end

  def Shoes.show_selector # gets called on alt-.
  end
end

上記のコードは靴のコードにモンキー パッチを適用し、対応するキーが押されても何もしません。

残りのデフォルト バインディングにも同じ手法を使用できます。キーバインディングの靴ソースをgrepし、対応するメソッドを見つけて、アプリ内で空のメソッドを定義して組み込みメソッドをオーバーライドします.

于 2009-04-08T08:18:45.407 に答える
0

method.unbind(obj)を試しましたか?

于 2009-03-08T18:55:09.697 に答える
0

「イベントを削除する」とはどういう意味ですか? 特定のイベントを無視したいですか、それともイベントリスナーを「オフ」にしたいですか?

前者の場合は、イベントを無視するリスナーを作成することをお勧めします。

後者の場合、外部からアクセス可能な値に基づいてリスナーの本体を条件付きにして、オン/オフのスイッチを自分に与えてみませんか。

何か他のものが必要な場合は、質問を編集して明確にしてください。後で戻って回答を編集します。

あなたのコメントに応えて、上記の選択肢の 2 番目を再提案します。あなたが本当に派手になりたいなら、次のように書くことができます:

$keypress_listeners = {}
keypress do |key|
    $keypress_listeners.values.each { |l| l.call(key)
    end
$keypress_listeners[:hero_controller] = lambda { |key| ... }
:
:
$keypress_listeners.delete[:hero_controller]

他のイベントについても同様ですが、それはおそらくやり過ぎです。一方、イベント処理を完全に制御できます。

于 2009-03-08T18:56:00.613 に答える