Uncaught TypeError: Cannot read property 'setVisible' undefined
Im assez nouveau pour SAPUI5 et quand je clique sur le bouton je reçois le message d'erreur dans le titre
ce que j'ai fait Est que j'ai utilisé le SAP web IDE pour créer un nouveau projet MVC .
dans la vue principale JS j'ai mis
createContent : function(oController) {
var btn = new sap.m.Button({
id:"myBtn",
text : "Content Button"
});
return new sap.m.Page({
title: "TitleT",
content: [ btn ]
});
}
dans le contrôleur Principal du JS j'ai mis le code suivant
onInit: function() {
var that = this;
window.setTimeout(function() {
that.byId("myBtn").setVisible(true);
}, Math.random() * 10000);
},
onPress: function() {
this.byId("pressMeButton").setText("I got pressed");
}
Quand je le lance je vois le bouton, mais quand je clique dessus, j'obtiens l'erreur dans l'Init,
ce que je fais mal ici?
- Depuis votre contrôleur est
this
, etthat
est attribuéthis
, vous devriez également consulter le contrôleur de la vue avant de pouvoir accéder à l'un quelconque de ses contrôles; c'est à direthat.getView().byId("myBtn").setVisible(true);
- J'ai aussi essayé, mais sa fonctionne pas...une autre idée?
- Avez-vous tenté avec jQuery.proxy?
- pouvez-vous donner des exemples?
- Mon mauvais, ayant travaillé avec XMLViews beaucoup, le code que j'ai fourni fonctionne pour XMLViews. Pour le Javascript vue, utilisez le code suivant:
sap.ui.getCore().byId("myBtn")
Vous devez vous connecter pour publier un commentaire.
Le réel problème avec votre code, c'est que vous créez un id statique dans l'option javascript de votre point de vue, mais le contrôleur de recherche de l'id avec un préfixe comme "__jsview0--myBtn" si vous l'appelez.byId("myBtn").
Par conséquent, vous devez utiliser createId("myBtn") dans l'option javascript de votre vue pour définir l'id ou sap.l'interface utilisateur.getCore().byId("myBtn") dans le contrôleur et il fonctionne parfaitement. La première approche est recommandée afin d'éviter les collisions de noms.
PS:
je n'ai pas vraiment le cas d'utilisation, il semble que vous souhaitez afficher le bouton qu'après un certain (aléatoire) calendrier. Mais le visible drapeau par défaut est déjà le cas, de sorte que le bouton sera toujours visible.
Utiliser le délai standard et byId fonction de SAPUI5 comme ceci: