Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 如何使用木偶创建全局按键事件侦听器_Backbone.js_Coffeescript_Marionette - Fatal编程技术网

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来直接触发视图的方法,但我认为这不是您想要的。

这可能很有用,因为它为您的问题提供了一个干净的解决方案