首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将KeyMaps添加到视图端口的最佳实践

将KeyMaps添加到视图端口的最佳实践
EN

Stack Overflow用户
提问于 2014-12-13 21:11:11
回答 1查看 3.2K关注 0票数 2

创建/绑定KeyMaps到视图端口的最佳位置是什么?

给出这样一个非常简单的Viewport:

代码语言:javascript
复制
Ext.define('EmptyTemplate.view.Viewport', {
    extend: 'Ext.container.Viewport',
    requires:[
        'Ext.layout.container.Fit',
        'EmptyTemplate.view.Main'
    ],
    layout: {
        type: 'fit'
    },

    items: [{
        xtype: 'app-main'
    }],

    listeners: {
        afterrender: {
            fn: function(){
                // map one key by key code
                this.keyMap = Ext.create('Ext.util.KeyMap', this.el, {
                    scope: this,
                    key: Ext.EventObject.ENTER,
                    fn: function () {
                        console.log("enter pressed");
                    }
                });
            }
        }
    }
});

创建KeyMaps的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-14 09:48:30

优先提供一些最佳实践建议:

如果需要设置组件,请使用

  • [initComponent][1] (您应该阅读这篇文章获取详细信息),
  • 另一个提供了template methods
  • 在一些罕见的情况下,constructor

在这种情况下,我将使用模板方法afterRender

代码语言:javascript
复制
Ext.define('EmptyTemplate.view.Viewport', {
    extend: 'Ext.container.Viewport',
    requires:[
        'Ext.layout.container.Fit',
        'EmptyTemplate.view.Main'
    ],
    layout: {
        type: 'fit'
    },

    items: [{
        xtype: 'app-main'
    }],

    afterRender: {
        this.callParent(arguments); // always!!
        this.bindKeyMap();
    },

    bindKeyMap: function() {
        var me = this; // use 'me' if 'this' occurs more then 3 times
        if(me.keyMap) {
            me.keyMap.enable();
            return;
        }
        // map one key by key code
        me.keyMap = Ext.create('Ext.util.KeyMap', me.el, {
            scope: me,
            key: Ext.EventObject.ENTER,
            fn: me.onEnter
        });
    },

    unbindKeyMap: function() {
        this.keyMap.disable();
    },

    onDisable: function() {
        this.unbindKeyMap();
        this.callParent(arguments); // always!!
    },

    onEnable: function() {
        this.callParent(arguments); // always!!
        this.bindKeyMap();
    },

    onEnter: function(){
       // i am executed in the scope of the class instance
    }
});

请注意,上面的示例处理整个密钥映射,但您也可以从映射中选择添加 / 删除单键。

注意到,这是未经测试的原型代码,但它应该是这样工作的。

如何找到模板方法

  1. 文档
  2. 显示受保护成员

  1. 寻找

标记

这篇关于重写也可能是个不错的读物。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27463675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档