1

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

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

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

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

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

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

4

1 回答 1

3

Here's how we finally wound up doing it:

  • When the pane was created, we called becomeFirstResponder() on it.
  • We added acceptsFirstResponder: YES to its view definition.
  • Then we added to the view definition:
    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;
    }

...and that did the trick.

于 2010-09-20T18:01:05.127 回答