Como você verifica se uma propriedade é indefinida em qml?

10

Como você verifica se uma propriedade é indefinida em qml?

Isso é o que estou tentando fazer:

Button {
    id: myButton
    text: if (text === "undefined"){"default text"}
}
    
por Akiva 24.09.2014 / 09:57

3 respostas

9

Experimente: text: text ? text : "default text"

"undefined" é apenas uma representação de string de uma referência que não faz referência a nada, assim como None ou NULL em outros idiomas.

=== é um operador de comparação estrita, convém ler este tópico: link

    
por Kissiel 24.09.2014 / 15:37
3
import QtQuick 2.3
import QtQuick.Controls 1.2

Button {
    id: myButton
    text: text ? text : "default text"
}

Esta resposta lança um aviso para mim.

QML Button: Binding loop detected for property "text"

Em vez disso, o text to modelText gera um erro.

ReferenceError: modelText is not defined

Isso interrompe a execução do Javascript para mim; ou seja, a próxima linha não é chamada.

Via Javascript

O mesmo acontece ao configurá-lo via Javascript, mas é bastante detalhado.

import QtQuick 2.3
import QtQuick.Controls 1.2

Button {
    id: myButton
    text: "default text"

    Component.onCompleted: {
        if (modelText !== "undefined") {
            myButton.text = modelText;
        }
    }
}

Usando typeof

O operador typeof silencia o erro e funciona conforme o esperado.

import QtQuick 2.3
import QtQuick.Controls 1.2

Button {
    id: myButton
    text: "default text"

    Component.onCompleted: {
        if (typeof modelText !== "undefined") {
            myButton.text = modelText;
        }
    }
}
    
por Marcus Ottosson 22.11.2014 / 16:24
1

Para comparar com o indefinido, você escreve text === undefined . Isso será avaliado como falso se text for null .

Se você quiser verificar se o valor está presente (por exemplo, verificar para undefined e null ), use-o como condição na instrução if ou no operador ternário. Se você precisar armazenar o resultado da comparação como um valor booleano, use var textPresent = !!text (embora o dobro de ! possa parecer confuso para alguém que esteja lendo o código).

    
por tonytony 29.11.2014 / 11:26