未调用onInit中的SAPUI5向下键
我在控制器的onInit中有以下代码:未调用onInit中的SAPUI5向下键,sapui5,onkeydown,Sapui5,Onkeydown,我在控制器的onInit中有以下代码: $("input").on("keydown", ( function(evt) { if (evt.keyCode == 17 && (evt.ctrlKey)) { evt.preventDefault(); t
$("input").on("keydown", (
function(evt) {
if (evt.keyCode == 17 && (evt.ctrlKey)) {
evt.preventDefault();
that.onMoveStorageBin();
}
所以我的想法是,当我按下F11按钮时,onMoveStorageBin函数将被执行。但当我按下任何按钮时,它都不会进入onInit。钥匙扣的正确操作位置在哪里?
谢谢
Tim您应该在onAfterRendering生命周期挂钩上执行代码片段。这是因为在onInit中,jQuery调用将无法找到任何输入(因为与视图对应的元素尚未添加到DOM中) 根据描述和代码,我理解您需要检查是否按下了F11+CTRL键(因此检查为
evt.keyCode==122&&evt.ctrlKey
);如果想要单F11,只需选中evt.keyCode==122
你可以在这里找到一把小提琴:
onAfterRendering:function(){
jQuery(“输入”)。在(“键控”上,
功能(evt){
if(evt.keyCode==122&&evt.ctrlKey){
evt.preventDefault();
sap.m.MessageToast.show('Alert');
}
});
}
这种方法有以下局限性:
- 它直接使用DOM,并对UI5控件的呈现方式进行假设
- 它将侦听器应用于所有现有输入。您也可以通过使用其他选择器(例如CSS)进行调解
alert
):
var CustomInput=sap.m.Input.extend(“CustomInput”{
元数据:{
事件:{警报:{}
},
onkeydown:功能(evt){
if(evt.keyCode==122&&evt.ctrlKey){
//仅当
//UI5事件的preventDefault也被调用。
如果(!this.firevent(“alert”,{},true)){
evt.preventDefault();
}
}
},
渲染器:{}
});
感谢您的评论和示例。不确定我是否理解您的第二种方法,我应该将自定义控件放在哪里?请检查。简而言之,您应该在一个单独的.js文件中定义自定义控件,并使用适当的名称空间(基于根名称空间和文件夹结构)。然后,您可以在XML视图中引用您的命名空间,并像使用任何其他标准UI5控件一样使用您的控件。例如:定义的自定义控件在XML片段中使用。