Backbone.js 如何使用木偶创建全局按键事件侦听器
我正在开发一个应用程序,我希望完全由键盘输入驱动,而不是任何鼠标点击。它是使用木偶开发的,虽然我完全能够响应输入上的事件,但我确实很难响应不包含任何输入的视图上的事件Backbone.js 如何使用木偶创建全局按键事件侦听器,backbone.js,coffeescript,marionette,Backbone.js,Coffeescript,Marionette,我正在开发一个应用程序,我希望完全由键盘输入驱动,而不是任何鼠标点击。它是使用木偶开发的,虽然我完全能够响应输入上的事件,但我确实很难响应不包含任何输入的视图上的事件 events: -> 'keyup #discovery-region' : 'logKey' logKey: (e) -> alert("Key pressed") console.log("Key pressed " + e.which) 在我的index.html文件中 <div
events: ->
'keyup #discovery-region' : 'logKey'
logKey: (e) ->
alert("Key pressed")
console.log("Key pressed " + e.which)
在我的index.html文件中
<div class="discovery" id="discovery-region"></div>
在这种情况下,我希望处理发现区域上的控制键盘输入。然而,我也希望这个地区被删除,在以后的日期,另一个地区是在它的地方。我应该创建一个全局机制来处理事件吗?我通过创建一个布局视图来存档它,在这个布局中我定义了一个区域,在这个区域中我可以显示我想要的任何视图,如果需要的话可以交换它们,在布局视图中我还为区域内的键控定义了一个事件侦听器。 对我来说,唯一的诀窍是重点必须放在区域div上。但我认为你可以在其他区域添加更多的听众
var MyLayout = Backbone.Marionette.Layout.extend({
template: "#layout-template",
events : {
"keyup #aRegion" : "test"
},
regions: {
aRegion: "#aRegion"
},
test : function () {
console.log("hi");
}
});
这是正在工作的jsfiddle
我希望这能有所帮助。我会尝试使用事件进行沟通:
events: ->
'keyup #discovery-region' : 'triggerKeyEvent'
triggerKeyEvent: (e) ->
MyApp.trigger("discovery:region:keypress", e)
然后,在需要响应它的视图中,只需为该事件添加事件侦听器:
myViewInstance.on("discovery:region:keypress", (e) ->
// do something with the keypress event
由于您的应用程序现在广播按键事件,因此在创建/显示视图时,每个视图都可以简单地收听这些事件。问题解决了
作为旁注,根据视图需要对按键做出反应的原因,您可能还需要研究triggerMethod来直接触发视图的方法,但我认为这不是您想要的。这可能很有用,因为它为您的问题提供了一个干净的解决方案