捕获SproutCore中的删除/退格键

时间:2010-09-13 17:31:46

标签: keyboard keyboard-events sproutcore

我有一个SproutCore窗格 - 一个PalettePane,特别是 - 它包含一个绑定到屏幕上其他位置的对象的表单。窗格导致对象删除交互出现问题。我想要它的工作方式是:

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

到目前为止,我得到了其中一种行为,而不是两种行为。如果我在窗格中设置acceptsKeyPane: YES,我会将退格/删除键应用于文本字段,但是当文本字段没有焦点时,不会删除所选对象。如果我使用acceptsKeyPane: NO,当我正在编辑文本字段并点击退格时,它会删除我尝试编辑的对象。

为了增加侮辱伤害,在acceptsKeyPane: YES的Firefox中,退格键被浏览器捕获并被解释为后退按钮点击,这对用户来说是令人沮丧的。

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

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

1 个答案:

答案 0 :(得分:3)

以下是我们最终如何做到这一点:

  • 创建窗格时,我们在其上调用了becomeFirstResponder()
  • 我们在其视图定义中添加了acceptsFirstResponder: YES
  • 然后我们添加到视图定义中:
    keyDown: function(evt) {
      return this.interpretKeyEvents(evt) ? YES : NO;
    },

    deleteBackward: function() {
      this.get('objectToEdit').destroy();
      return YES;
    },

    deleteForward: function() {
      this.get('objectToEdit').destroy();
      return YES;
    }

......这就是诀窍。