2010-09-13 52 views
1

我有一个SproutCore窗格 - 一个PalettePane,具体来说 - 它包含绑定到屏幕上其他任何对象的窗体。该窗格造成对象删除交互的麻烦。我想它的工作方式是:捕获SproutCore中的删除/退格键

  • 如果一个文本输入框的重点是,退格/删除键应适用于这些领域(即编辑文本)
  • 如果没有文本输入字段具有焦点,退格键/删除键应该删除与表单相关的选定对象。 (当用户选择的对象,所以如果存在窗格中有一个选择的对象出现窗格。)

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

要在Firefox中使用acceptsKeyPane: YES添加侮辱性伤害,浏览器会捕获退格键,并将其解释为后退按钮单击,这会让用户感到沮丧。

我看过root_responder.js代码,它看起来像SproutCore以不同的方式处理Firefox的后退空间,但如果我可以像上面描述的那样处理它们,FF和其他浏览器之间的区别应该是没有意义的。

ETA 2011年5月:记住在阅读这里的答案时,SproutCore API对于1.5,1.6和更高版本可能与此不一样。

+0

请考虑查看邮件列表[email protected]或IRC频道#sproutcore。 (如果我能够提出一个建议,我也会在这里回答。) – 2010-09-15 22:18:41

+0

谢谢,彼得 - 我在IRC频道问这个问题,并听取了蟋蟀的唧唧声。邮件列表仅在昨天开始,不是吗? – pjmorse 2010-09-16 12:34:01

回答

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; 
    } 

...这奏效了。