我想知道如何从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'
}
]
});
答案 0 :(得分:1)
我在主要新闻发布会上遇到了类似的问题。我没有像你一样使用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是正确的)