Como você verifica se uma propriedade está indefinida no qml?


Respostas:


12

Experimentar: text: text ? text : "default text"

"undefined"é apenas uma representação em cadeia de uma referência não fazer referência a qualquer coisa, assim como None, ou NULLem outras línguas.

===é um operador de comparação estrita, convém ler este tópico: /programming/523643/difference-between-and-in-javascript


Essa foi uma solução muito inteligente. Obrigado. Apenas para explicar a mais alguém; a sua sorte como dizendo (me corrija se eu estiver errado) if (texto === texto) {text} else { "texto padrão"}
Akiva

2
if (text) { text } else {"default text"}para ser exato. if (object)avalia como false se não objectfor definido. Corte semelhante ao estilo C se (ponteiro) que é avaliado como falso se o ponteiro tiver um valor 0 (NULL). Vale ressaltar que a textvariável usada para a propriedade de texto de um botão é retirada do escopo externo. Será muito mais claro com text: inText ? inText : "default text"if(inText) { text } else {"default text"}
:,

Desculpe ser idiota, mas isso é algo que eu nunca entendi direito. Na lógica, seria tecnicamente lido como este - if (text is true) then {text = text} else {text = "default text"}- isso é preciso?
Akiva

2
Você está certa. A única coisa não intuitiva sobre esse pseudocódigo é if (text is true). Acho mais fácil pensar como if (text *is*)ou if (text exists). Outra boa fonte: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Kissiel

1
Isso falhará com text = "" (string vazia), o if retornará false
RvdK 16/16/16

5
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"

Mudar textpara em modelTextvez disso 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 defini-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 typeofoperador 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;
        }
    }
}

3

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

Se você deseja verificar se o valor está presente (ou seja, verifique os dois undefinede 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 !possa parecer confuso para quem lê o código).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.