わかりました、掘り下げます。最初に、コンテキスト ヘルプを実装するために次のことを行います。
- ヘルプ プラグインを作成し、コンテキスト ヘルプを提供する各コンポーネントに追加しました。プラグインはクリックリスナーを各コンポーネントに登録します。
- 発生したクリック イベントは、最後にフォーカスされたコンポーネントへの参照を保持する静的な HelpManager にそのソースを登録します。
- 次に、ショートカットを押した後、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);
}
}
}
});