2

MVC スタイルで記述された単純な ExtJS アプリケーションがあります (私の情報の多くはhereから入手できます)。

私のアプリケーションはビューポートを作成し、フォーム、いくつかのフィールド、およびボタンを含むビューを持っています。

アプリケーションには「loginButtonClick」機能を備えたコントローラーがあり、コントローラーは次のようにクリック イベントを監視します。

this.control({
 'loginwindow button[action=save]': {
   click: this.loginButtonClick
 }
}

これはうまく機能しますが、ログイン ウィンドウが表示されているときに、Enter キーで loginButtonClick メソッドも実行する必要があります。

私はあらゆる種類のことを試しましたが、私が抱えている基本的な問題は、キーマップを作成するためのコードを配置する場所と、それを適切なインスタンスにバインドする方法です。

たとえば、コントローラーでキーマップを作成する場合 (私の好みです)、そのコントローラーの特定のビュー インスタンスを取得する必要があります (同じ種類のウィンドウが複数開いている可能性があります)。

では、Enter キーが押されたときにローカル メソッド (this.loginButtonClick) を呼び出して、ビュー (ウィンドウ) のコントローラー内からキー マップ (または?) を作成するにはどうすればよいでしょうか?

4

3 に答える 3

2

できることは、keyMap を初期化するコードを、次のようにログイン ウィンドウ afterrender イベントにバインドすることです。

this.control{(
   'loginwindow' : {
      afterrender: this.initializeKeyMap
 }

次に、keyNav をセットアップする関数を作成します。

initializeKeyMap: function(window, options) {
   this.keyNav = Ext.create('Ext.util.KeyNav', window.el, {
         enter: this.loginButtonClick,
         scope: this
   });           
}

ユーザーが Enter キーを押した場合にダイアログが読み込まれると、関数が実行されます。

于 2013-02-12T19:59:58.193 に答える
0

これらすべてをウィンドウ レンダー イベントでセットアップできます。そのため、レンダリング時に Enter キーのイベントリスナーを追加し、プログラムで呼び出したハンドラーでログイン ボタンをクリックします。

于 2011-11-24T14:29:22.987 に答える
0

これを実現するには、フォームのテキスト/パスワード フィールドに次のリスナーを追加します。

listeners: {
    specialkey: function(field, e){
        if (e.getKey() == e.ENTER) {
            var form = this.up('form').getForm();
            submitLoginForm(form);
        }
    }
}

ここで「フォーム」はフォームで、「submitLoginForm」はフォーム送信時に呼び出される関数で、あなたの場合は loginButtonClick だと思います。

お役に立てれば。

于 2011-12-14T13:15:26.420 に答える