web-dev-qa-db-fra.com

Comment vérifier si une propriété est indéfinie dans qml?

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"}
}
13
Akiva

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

11
Kissiel
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.

Via javascript

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;
        }
    }
}

Utiliser 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;
        }
    }
}
5
Marcus Ottosson

Pour comparer avec undefined, écrivez text === undefined. Cela sera évalué à false si textest nullname__.

Si vous voulez vérifier si la valeur est présente (c.-à-d., Vérifiez si undefinedet nullname__), 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).

2
tonytony