Comment vérifiez-vous si une propriété n'est pas définie en qml?
Voici ce que j'essaie de faire:
Button {
id: myButton
text: if (text === "undefined"){"default text"}
}
Comment vérifiez-vous si une propriété n'est pas définie en qml?
Voici ce que j'essaie de faire:
Button {
id: myButton
text: if (text === "undefined"){"default text"}
}
Essayer:
text: text ? text : "default text"
"undefined"
est juste une représentation sous forme de chaîne d'une référence qui ne fait référence à rien, comme None
ou NULL
dans d'autres langues.
===
est un opérateur de comparaison strict, vous voudrez peut-être lire ce fil: /programming/523643/difference-between-and-in-javascript
if (text) { text } else {"default text"}
pour être exact.if (object)
est évalué à faux siobject
n'est pas défini. Piratage similaire au style C if (pointeur) qui est évalué à faux si le pointeur a une valeur de 0 (NULL). Il convient de noter que latext
variable utilisée pour la propriété de texte d'un bouton est prise hors de la portée. Ce sera beaucoup plus clair avectext: inText ? inText : "default text"
if(inText) { text } else {"default text"}
if (text is true) then {text = text} else {text = "default text"}
- est-ce exact?if (text is true)
. Je trouve plus facile de penser commeif (text *is*)
ouif (text exists)
. Une autre bonne source: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Cette réponse lance un avertissement pour moi.
Changer
text
à lamodelText
place génère une erreur.Cela arrête l'exécution de Javascript pour moi; c'est-à-dire que la ligne suivante n'est pas appelée.
Via Javascript
La même chose se produit lors de la configuration via Javascript, mais est assez verbeuse.
En utilisant
typeof
L'
typeof
opérateur coupe le son de l'erreur et fonctionne comme prévu.la source
Pour comparer avec undefined vous écrivez
text === undefined
. Cela sera évalué à faux sitext
c'est le casnull
.Si vous voulez vérifier si la valeur est présente (c'est-à-dire vérifier les deux
undefined
etnull
), utilisez-la comme condition dans l'instruction if ou l'opérateur ternaire. Si vous avez besoin de stocker le résultat de la comparaison en tant que valeur booléenne, utilisezvar textPresent = !!text
(même si le double!
peut sembler déroutant pour celui qui lit le code).la source