Extjs 4 - 应用程序上下文帮助 - 查找重点组件

时间:2012-10-17 13:52:11

标签: extjs extjs4 extjs-mvc

我正在考虑在我的应用程序中实现上下文帮助,我想知道是否有可能以我的方式实现它:

  1. 注册Ext.Body()ex的全局快捷方式。 CTRL + H
  2. 快捷方式处理程序将找到焦点组件并调用其showHelp方法
  3. 如果组件没有showHelp方法,它将移动到其父级并调用showHelp方法。
  4. 我想知道第2步是否可行?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

好的,我深入研究它。首先,我执行以下操作来实现上下文帮助:

  1. 创建了帮助插件并将其添加到应提供上下文帮助的每个组件中。插件寄存器单击每个组件的侦听器。
  2. 触发的click事件将其源注册到静态HelpManager中,该HelpManager保存对最后一个焦点组件的引用
  3. 然后在按下快捷键后,我从HelpManager获取最后一个组件并使用其帮助配置启动上下文帮助。
  4. 代码:

    
        Ext.define('GSIP.core.help.GSIPHelp',{
            alias:'plugin.help',
            init: function(component) {
                //var me = this;
                component.on('afterrender',function(c) {
                    //WHY FOCUS EVENT IS NOT WORKING?? ONLY CLICK.
                    c.getEl().on('click',function() {
                        console.log('SHOUD REGISTER FOCUS');
                        GSIP.core.help.GSIPHelpMgr.registerFocus(component);
                    });
                });
            }
        });
    
    

    该解决方案存在严重缺陷。如果组件具有父级并且它们都获得了帮助插件,则click事件将以父级为最后一次触发两次。

    在编码期间,我在文档Ext.FocusManager中找到了,就是这样!使用它我能找到有针对性的组件。使用简单的功能:如果组件没有帮助我扫描其父项找到一个,如果没有父我只显示索引,我就能创建上下文帮助。

    
        Ext.define('GSIP.core.help.Help',{
            mixins:{
                document:'GSIP.core.utils.Document'
            },
            url:'/GSIP/resources/gsip/core/help/html/',
            showHelp:function(comp) {
    
                if (comp.help != undefined) {
                    this.showDocumentSrc(this.url + comp.help + '.html');
                }else{
                    if (comp.ownerCt == undefined) {
                        this.showDocumentSrc(this.url + 'index.html');
                    }else{
                        this.showHelp(comp.ownerCt);
                    }
                }
            }
        });