【问题标题】:Capturing the delete/backspace keys in SproutCore在 SproutCore 中捕获删除/退格键
【发布时间】:2025-11-22 22:50:02
【问题描述】:

我有一个 SproutCore 窗格——具体来说是一个 PalettePane——它包括一个绑定到屏幕上其他位置的对象的表单。窗格导致对象删除交互出现问题。我希望它的工作方式是:

  • 如果文本输入字段处于焦点位置,则退格/删除键应应用于这些字段(即编辑文本)
  • 如果没有文本输入字段有焦点,退格/删除键应该删除与表单相关的选定对象。 (当用户选择了一个对象时,窗格就会出现,所以如果该窗格存在,那么就有一个选定的对象。)

到目前为止,我得到了这些行为中的一种或另一种,从来没有两者兼而有之。如果我在窗格中设置acceptsKeyPane: YES,我会得到应用于文本字段的退格/删除键,但当文本字段没有焦点时不会删除所选对象。如果我使用acceptsKeyPane: NO,当我编辑文本字段并按退格键时,它会删除我试图编辑的对象。

雪上加霜的是,在带有 acceptsKeyPane: YES 的 Firefox 中,退格键被浏览器捕获并解释为后退按钮单击,这会让用户感到沮丧。

我查看了root_responder.js 代码,看起来 SproutCore 为 Firefox 处理退格键的方式不同,但如果我可以如上所述处理它们,那么 FF 和其他浏览器之间的区别应该没有实际意义。

ETA 2011 年 5 月:阅读此处的答案时请记住,用于 1.5、1.6 及更高版本的 SproutCore API 可能与此不同。

【问题讨论】:

  • 考虑查看sproutcore@googlegroups.com 的邮件列表或#sproutcore 的IRC 频道。 (如果我能提出建议,我也会在这里回答。)
  • 谢谢,彼得 - 我在 IRC 频道问了这个问题,并听到了蟋蟀的啁啾声。邮件列表是昨天才开始的,不是吗?

标签: keyboard keyboard-events sproutcore


【解决方案1】:

这就是我们最终完成的方式:

  • 创建窗格后,我们在其上调用了becomeFirstResponder()
  • 我们在其视图定义中添加了acceptsFirstResponder: YES
  • 然后我们添加到视图定义中:
keyDown:函数(evt){ 返回 this.interpretKeyEvents(evt) ?是:否; }, deleteBackward:函数(){ this.get('objectToEdit').destroy(); 返回是; }, 删除转发:函数(){ this.get('objectToEdit').destroy(); 返回是; }

...这样就成功了。

【讨论】:

    最近更新 更多