2010-09-13 51 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; 
    } 

...這奏效了。