代码之家  ›  专栏  ›  技术社区  ›  pjmorse

在SproutCore中捕获delete/backspace键

  •  1
  • pjmorse  · 技术社区  · 14 年前

    我有一个SproutCore窗格,特别是PalettePane,它包含一个绑定到屏幕上其他地方的对象的窗体。窗格导致对象删除交互出现问题。我希望它的工作方式是:

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

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

    雪上加霜的是,在Firefox中 是的

    我已经看过了 root_responder.js

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

    1 回复  |  直到 13 年前
        1
  •  3
  •   pjmorse    14 年前

    以下是我们最终如何做到的:

    • 创建窗格时,我们调用 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;
        }
    

    ……这就成功了。