我点击按钮,点击" ENTER"在键盘上,但我想要只在显示窗口时处理点击(' MyDesktop.Books')。但当我显示窗口,然后关闭它,当我点击"输入" ,窗口(' MyDesktop.Books')再次显示。
怎么做:处理点击" ENTER"仅在显示窗口时在键盘上 代码:
Ext.define('MyDesktop.Books', {
extend: 'MyDesktop.BaseWindow',
id: 'books-win',
title: 'Book',
width: 700,
height: 400,
iconCls: 'small',
layout: 'fit',
items: [
{
xtype: 'bookwrap',
listeners: {
afterrender: function() {
var mapEnterNew = new Ext.KeyMap(document, {
key: 13,
fn: function(e) {
Ext.ComponentQuery.query('bookwrap button[name=createbook]')[0].getEl().dom.click();
}
});
}
}
}
],
});
答案 0 :(得分:1)
我认为您应该只在需要显示时初始化窗口并在之后删除,或者在字段/表单focus中附加事件并在blur上将其删除。
如果我知道xtype: "bookwrap"
是什么,我可以给出一个更好的答案/例子。
你不应该真的需要使用getEl().dom.click()
,ExtJs可以使用内置组件来处理所有表单提交需求,你可以在控制器中使用refs来获得对按钮的引用。< / p>
此代码在渲染时附加关键事件处理,并在关闭/隐藏窗口时再次将其删除:
还有Fiddle。
Ext.application({
name: 'Fiddle',
launch: function() {
Ext.define('Books', {
extend: 'Ext.window.Window',
id: 'books-win',
title: 'Book',
width: 700,
height: 400,
iconCls: 'small',
layout: 'fit',
items: [{
xtype: 'panel',
html: 'test'
}],
listeners: {
beforehide: function() {
this.mapEnterNew.destroy();
},
afterrender: function() {
this.mapEnterNew = new Ext.KeyMap(document, {
key: 13,
fn: function(e) {
console.log(e);
Ext.ComponentQuery.query('bookwrap button[name=createbook]')[0].getEl().dom.click();
}
});
}
}
});
Ext.create('Books').show();
}
});