Vous devez exécuter votre extrait de code sur le hook de cycle de vie onAfterRendering. En effet, dans l'onInit, l'appel jQuery ne pourra pas trouver d'entrée (car les éléments correspondant à votre vue n'ont pas encore été ajoutés au DOM). En fonction de la description et du code, je comprends que vous devez vérifier si la touche F11 + CTRL a été enfoncée (par conséquent, la vérification est evt.keyCode == 122 && evt.ctrlKey
); Si vous voulez un F11 sinple, il vous suffit de vérifier evt.keyCode == 122
.
Vous pouvez trouver un violon de travail ici: https://jsfiddle.net/8kcs8xch/4/
onAfterRendering: function() {
jQuery("input").on("keydown",
function(evt) {
if (evt.keyCode == 122 && evt.ctrlKey) {
evt.preventDefault();
sap.m.MessageToast.show('Alert');
}
});
}
Cette approche présente les limites suivantes:
- Il utilise les DOM directement et fait des hypothèses sur la façon dont les contrôles UI5 sont rendus.
- Il applique l'écouteur sur ALL entrées existantes. Vous pouvez le faire en utilisant d'autres sélecteurs (par exemple CSS).
Une solution considérablement meilleure serait de créer un contrôle personnalisé qui a cet événement. Vous pouvez trouver un exemple ici: https://jsfiddle.net/8kcs8xch/3/
Fondamentalement, vous devez écouter l'événement keydown en déclarant un gestionnaire DOM dans votre nouveau contrôle. Vous pouvez alors définir un événement UI5 personnalisé (je l'appelais simplement alert
) basé sur cet événement DOM:
var CustomInput = sap.m.Input.extend("CustomInput", {
metadata: {
events: {alert: {}}
},
onkeydown: function(evt) {
if (evt.keyCode == 122 && evt.ctrlKey) {
// only prevent the default of the DOM event if the
// UI5 event's preventDefault is called as well.
if (!this.fireEvent("alert", {}, true)) {
evt.preventDefault();
}
}
},
renderer: {}
});
Merci pour les commentaires et les exemples. Je ne sais pas si je comprends votre deuxième approche, où devrais-je mettre le contrôle personnalisé? – Tim
Veuillez vérifier la [documentation] (https://openui5.hana.ondemand.com/#docs/guide/91f1703b6f4d1014b6dd926db0e91070.html). En un mot, vous devez définir votre contrôle personnalisé dans un fichier .js distinct, avec un espace de noms approprié (basé sur votre espace de noms racine et la structure du dossier). Vous pouvez ensuite référencer votre espace de noms dans e.g. une vue XML et utilisez votre contrôle comme vous utiliseriez n'importe quel autre contrôle UI5 standard. –
Exemple: le contrôle personnalisé défini ici [https://github.com/serban-petrescu/sbwo/blob/master/web/util/HelpVideo.js] est utilisé dans [this] (https: // github. com/serban-petrescu/sbwo/blob/maître/web/fragment/dialog/HelpVideoDialog.fragment.xml) Fragment XML. –