-1

アプリケーションにコンテキスト ヘルプを実装することを考えています。私が考えている方法で実装できるかどうか疑問に思っています。

  1. Ext.Body() へのグローバルショートカットを登録する ex. ctrl+h
  2. ショートカット ハンドラーは、フォーカスされたコンポーネントを見つけて、その showHelp メソッドを呼び出します。
  3. コンポーネントに showHelp メソッドがない場合、その親に移動して showHelp メソッドを呼び出します。

ステップ2は可能ですか?または、これを行うより良い方法はありますか?

4

1 に答える 1

0

わかりました、掘り下げます。最初に、コンテキスト ヘルプを実装するために次のことを行います。

  1. ヘルプ プラグインを作成し、コンテキスト ヘルプを提供する各コンポーネントに追加しました。プラグインはクリックリスナーを各コンポーネントに登録します。
  2. 発生したクリック イベントは、最後にフォーカスされたコンポーネントへの参照を保持する静的な HelpManager にそのソースを登録します。
  3. 次に、ショートカットを押した後、HelpManager から最後のコンポーネントを取得し、そのヘルプ構成を使用してコンテキスト ヘルプを起動します。

コード:

    Ext.define('GSIP.core.help.GSIPHelp',{
        エイリアス:'plugin.help',
        init: 関数 (コンポーネント) {
            //var me = this;
            component.on('afterrender',function(c) {
                //フォーカスイベントが機能しないのはなぜですか?? クリックするだけ。
                c.getEl().on('クリック',関数() {
                    console.log('SHOUD REGISTER FOCUS');
                    GSIP.core.help.GSIPHelpMgr.registerFocus(コンポーネント);
                });
            });
        }
    });

このソリューションには重大な欠陥がありました。コンポーネントに親があり、両方にヘルプ プラグインがある場合、クリック イベントは最後に親で 2 回発生します。

コーディング中にドキュメントExt.FocusManagerで見つけたものでした。それを使用して、フォーカスされたコンポーネントを見つけることができます。単純な関数を使用する: コンポーネントにヘルプがない場合は、その親をスキャンして検索し、親がない場合はインデックスを表示するだけで、コンテキスト ヘルプを作成できました。

    Ext.define('GSIP.core.help.Help',{
        ミックスイン:{
            ドキュメント:'GSIP.core.utils.Document'
        }、
        url:'/GSIP/resources/gsip/core/help/html/',
        showHelp:function(comp) {

            if (comp.help != 未定義) {
                this.showDocumentSrc(this.url + comp.help + '.html');
            }そうしないと{
                if (comp.ownerCt == 未定義) {
                    this.showDocumentSrc(this.url + 'index.html');
                }そうしないと{
                    this.showHelp(comp.ownerCt);
                }
            }
        }
    });

于 2012-10-18T12:23:17.373 に答える