1

私はSproutCoreペイン(具体的にはPalettePane)を持っています。これには、画面上の他の場所にあるオブジェクトに関連付けられたフォームが含まれています。ペインがオブジェクト削除の相互作用で問題を引き起こしています。私がそれを機能させたい方法は次のとおりです。

  • テキスト入力フィールドにフォーカスがある場合は、バックスペース/削除キーをそれらのフィールドに適用する必要があります(つまり、テキストの編集)
  • テキスト入力フィールドにフォーカスがない場合、バックスペース/削除キーはフォームに関連する選択されたオブジェクトを削除する必要があります。(このペインは、ユーザーがオブジェクトを選択すると表示されるため、ペインが存在する場合は、選択されたオブジェクトがあります。)

これまでのところ、私はこれらの動作のいずれかを取得しますが、両方を取得することはありません。ペインに設定acceptsKeyPane: YESすると、バックスペース/削除キーがテキストフィールドに適用されますが、テキストフィールドにフォーカスがない場合、選択したオブジェクトは削除されません。を使用するacceptsKeyPane: NOと、テキストフィールドを編集してバックスペースを押すと、編集しようとしていたオブジェクトが削除されます。

怪我に侮辱を加えるために、FirefoxではacceptsKeyPane: YESバックスペースキーを使用してブラウザにキャッチされ、戻るボタンのクリックとして解釈されます。これはユーザーを苛立たせます。

コードを確認したところ、FirefoxではSproutCoreroot_responder.jsがバックスペースを異なる方法で処理しているように見えますが、上記のように処理できる場合は、FFと他のブラウザーの違いは重要ではありません。

ETA 2011年5月:ここで回答を読むときは、1.5、1.6、およびそれ以降のSproutCoreAPIがこれと同じではない可能性があることに注意してください。

4

1 に答える 1

3

これが私たちが最終的にそれをやった方法です:

  • ペインが作成されたとき、私たちはそれを呼び出しbecomeFirstResponder()ました。
  • acceptsFirstResponder: YESビュー定義に追加しました。
  • 次に、ビュー定義に追加しました。
    keyDown:function(evt){
      this.interpretKeyEvents(evt)を返しますか?はい・いいえ;
    }、

    deleteBackward:function(){
      this.get('objectToEdit')。destroy();
      YESを返します。
    }、

    deleteForward:function(){
      this.get('objectToEdit')。destroy();
      YESを返します。
    }

...そしてそれはトリックをしました。

于 2010-09-20T18:01:05.127 に答える