Ryu*_*yuk 2 extjs extjs4 extjs4.1
什么是创建/绑定KeyMaps到视口的最佳位置?
给出一个非常简单的Viewport,如下所示:
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");
}
});
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
什么是创建KeyMaps的正确方法?
首先,一些最佳实践建议:
如果您需要设置组件使用
[initComponent][1](你应该阅读详细信息)template methods和constructor.在你的情况下,我将使用模板方法afterRender
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
}
});
Run Code Online (Sandbox Code Playgroud)
请注意,上面的示例处理整个键映射,但您也可以从映射中添加/删除单个键.
请注意,这是未经测试的原型代码,但它应该以这种方式工作.
如何查找模板方法:

标记
关于覆盖的这篇文章也可能是一个很好的阅读