Comment vérifier si une propriété est indéfinie dans qml?
C'est ce que j'essaie de faire:
Button {
id: myButton
text: if (text === "undefined"){"default text"}
}
Essayez: text: text ? text : "default text"
"undefined"
est simplement une représentation sous forme de chaîne d'une référence ne référençant rien, tout comme None
ou NULL
dans d'autres langues.
===
est un opérateur de comparaison strict, vous voudrez peut-être lire ce fil de discussion: https://stackoverflow.com/questions/523643/difference-between-and-in-javascript
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: text ? text : "default text"
}
Cette réponse lance un avertissement pour moi.
QML Button: Binding loop detected for property "text"
Le fait de remplacer text
par modelText
génère une erreur.
ReferenceError: modelText is not defined
Cela arrête l'exécution de Javascript pour moi; c'est-à-dire que la ligne suivante n'est pas appelée.
La même chose se produit lors de la configuration via Javascript, mais est assez prolixe.
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: "default text"
Component.onCompleted: {
if (modelText !== "undefined") {
myButton.text = modelText;
}
}
}
typeof
L'opérateur typeof
désactive l'erreur et fonctionne comme prévu.
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: "default text"
Component.onCompleted: {
if (typeof modelText !== "undefined") {
myButton.text = modelText;
}
}
}
Pour comparer avec undefined, écrivez text === undefined
. Cela sera évalué à false si text
est null
name__.
Si vous voulez vérifier si la valeur est présente (c.-à-d., Vérifiez si undefined
et null
name__), utilisez-la comme condition dans l'instruction if ou l'opérateur ternaire. Si vous devez stocker le résultat de la comparaison sous forme de valeur booléenne, utilisez var textPresent = !!text
(bien que le double !
puisse paraître déroutant pour un qui lit le code).