有什么方法可以删除鞋子中的事件?我搜索了许多网站和参考文献,但我找不到任何方法来删除一个事件...我发现我需要创建自己的事件管理器...它真的是必要的吗?或者有办法去除事件监听器?
答案 0 :(得分:2)
我发现Shoes只允许在给定事件上使用单个侦听器方法,因此您可以通过调用事件而不是将块传递给它来删除先前的侦听器。
例如,此鞋子应用程序将在单击一次后清除点击事件。如果您删除了阻止内部点击的呼叫,则会反复触发。
Shoes.app
@p = para "Empty"
@click_count = 0
click do |b,x,y|
@click_count += 1
@p.replace "Clicked #{@click_count} time(s)."
click # remove the click handler
end
end
答案 1 :(得分: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关键绑定的鞋源,找到相应的方法并在应用程序中定义一个空方法来覆盖内置方法。
答案 2 :(得分:0)
您是否尝试过method.unbind(obj)?
答案 3 :(得分:0)
您能否通过“删除活动”澄清您的意思?您是想忽略特定事件还是想要“关闭”事件监听器?
如果是前者,我建议写一个忽略该事件的听众。
如果是后者,为什么不让听众的身体以一些外部可访问的值为条件,给自己一个开/关开关。
如果您想要其他内容,请编辑问题以便澄清,稍后我会停止并编辑我的答案。
在回应你的评论时,我会重新提出上述第二种选择。如果你想得到真正的幻想,你可以写下这样的东西:
$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]
同样适用于任何其他事件,但这可能是矫枉过正的。另一方面,它可以让您完全控制事件处理。