シューズのイベントを削除する方法はありますか?多くのWebサイトや参照を検索しましたが、イベントを削除する方法が見つかりません...独自のイベントマネージャーを作成する必要があることを気にしています...本当に必要ですか?または、イベントリスナーをアタッチ解除する方法はありますか?
4 に答える
どのキーバインドを削除しますか? 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し、対応するメソッドを見つけて、アプリ内で空のメソッドを定義して組み込みメソッドをオーバーライドします.
method.unbind(obj)を試しましたか?
「イベントを削除する」とはどういう意味ですか? 特定のイベントを無視したいですか、それともイベントリスナーを「オフ」にしたいですか?
前者の場合は、イベントを無視するリスナーを作成することをお勧めします。
後者の場合、外部からアクセス可能な値に基づいてリスナーの本体を条件付きにして、オン/オフのスイッチを自分に与えてみませんか。
何か他のものが必要な場合は、質問を編集して明確にしてください。後で戻って回答を編集します。
あなたのコメントに応えて、上記の選択肢の 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]
他のイベントについても同様ですが、それはおそらくやり過ぎです。一方、イベント処理を完全に制御できます。