Backbone.js - 在视图处于活动状态时添加 keydown 事件?

Posted

技术标签:

【中文标题】Backbone.js - 在视图处于活动状态时添加 keydown 事件?【英文标题】:Backbone.js - Adding keydown events when view is active? 【发布时间】:2011-08-18 09:43:23 【问题描述】:

我有一个名为画廊的视图选项。我想在呈现画廊时收听并处理 keydown 事件(直到它关闭)。

如何在主干事件中做到这一点?我已经尝试了 'keydown X':function 的所有变体,但都没有奏效。

【问题讨论】:

您的图库是主干视图还是独立的 html + js? 向我们展示您的 keydown 事件选择器...我认为您将它们绑定到错误的元素 只是:事件: 'keypress':'doThis' 没有选择器。听任何按键。 尝试渲染绑定事件到$(document).remove() make unbind() 【参考方案1】:

我刚刚测试了以下内容,它完美无缺:

var view = Backbone.View.extend(
  // ... snip ...
  events: 
    'keyup :input': 'logKey'
    ,'keypress :input': 'logKey'
  
  ,logKey: function(e) 
    console.log(e.type, e.keyCode);
  
);

我会回去检查您的代码。 Backbone 中的所有事件都定义为附加到viewInstance.el 元素的委托。要取消绑定事件,请调用 viewInstance.remove(),它会在后台调用 $(viewInstance.el).remove() 并清理所有委托事件。

另请注意,在某些浏览器(我相信是 Firefox)中,存在一个已知问题,即某些键(如箭头键)不会冒泡,并且无法与委派的 keypress 事件一起正常工作。如果您要捕获特殊键,最好使用keyupkeydown

【讨论】:

这不是假设有问题的视图包含输入吗?我认为 OP 是在询问仅渲染特定视图的情况 - 想象有一个灯箱图像或其他东西,并且您想连接“Escape”以关闭图像...... 你是对的。我的解决方案假设有输入元素。如果您想对视图中任何位置的关键事件采取行动,您只需排除选择器(如 Backbone 文档所述)。 events: keyup: 'logKey' - 我无法让这些全局按键/keyup/keydown 工作。还有其他一些我必须忘记的小细节吗?您能否指出一个参考,甚至是一个小提琴,以获取有关文档范围事件的更多信息

以上是关于Backbone.js - 在视图处于活动状态时添加 keydown 事件?的主要内容,如果未能解决你的问题,请参考以下文章

Backbone.js 状态管理/基于 url 片段的视图初始化

如何确定当前视图控制器是不是处于活动状态,如果处于活动状态则执行代码

Backbone.js:清除所有视图的最佳方法

当 UIActivityViewController 处于活动状态时,视图出现在背景/背景后面

在 SwiftUI 中,如何使手势在容器视图之外处于非活动状态?

在键盘处于活动状态时呈现模态视图控制器