Javascript ExtJS5如何让keymap调用viewController函数?

Javascript ExtJS5如何让keymap调用viewController函数?,javascript,extjs,extjs-mvc,extjs5,Javascript,Extjs,Extjs Mvc,Extjs5,我想知道如何从extjs 5中的键映射调用控制器函数? 视图中的以下代码用于将密钥绑定到匿名函数,而不是控制器函数。该功能也由按钮调用,并且正在工作。如何正确设置调用控制器函数的作用域 Ext.define("MyApp.view.users.List",{ extend: 'Ext.grid.Panel', alias: 'widget.usersList', controller: 'users-list', listeners: { scop

我想知道如何从extjs 5中的键映射调用控制器函数?

视图中的以下代码用于将密钥绑定到匿名函数,而不是控制器函数。该功能也由按钮调用,并且正在工作。如何正确设置调用控制器函数的作用域

Ext.define("MyApp.view.users.List",{
    extend: 'Ext.grid.Panel',
    alias: 'widget.usersList',
    controller: 'users-list',
    listeners: {
        scope: 'controller',
        afterrender: function(window, options) {
            this.keyNav = new Ext.util.KeyMap ({
                target:window.el,
                binding: [
                    {key:"s", ctrl:true, fn: function(){alert("hallo shortkey");}},
                    {key:"c", ctrl:true, fn: "newUserFn"},
                ],
                scope:'controller'
            });
        }
    },
    tbar: [
        {
            itemId: 'users-list-btn-new',
            iconCls: 'icon-add',
            text: 'New User',
            handler: 'newUserFn'
        }
    ]
});

我在按键事件中也遇到过类似的问题。我没有像您那样使用KeyMap,但事件逻辑仍然是相关的

以下假设控制器具有要调用的方法“saveNewComponent”。必须触发视图中正在侦听的视图事件“callSave”,才能正确转发到控制器

Ext.define('teams.view.component.FormPanel', {
    extend: 'Ext.form.Panel',
    controller: "FormPanelController",
    listeners: {
        callSave: "saveNewComponent"
    },
    beforeShow: function(){     
        var me = this;
        me.body.dom.addEventListener("keydown", Ext.bind(onKeyDown, this), false);
        function onKeyDown(e) {
            //Listen for Ctrl+S
            if (e.ctrlKey && e.which === 83){
                e.preventDefault(); 
                me.fireEvent("callSave");
                return false;
            }
        }
    },
    ....
}
我尝试了很多方法来实现这一点,这个解决方案是唯一一个在控制器内部具有正确上下文的解决方案(即这个var是正确的)