Como você verifica se uma propriedade está indefinida no qml?
Isto é o que estou tentando fazer:
Button {
id: myButton
text: if (text === "undefined"){"default text"}
}
Como você verifica se uma propriedade está indefinida no qml?
Isto é o que estou tentando fazer:
Button {
id: myButton
text: if (text === "undefined"){"default text"}
}
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 NULL
em outras línguas.
===
é um operador de comparação estrita, convém ler este tópico: /programming/523643/difference-between-and-in-javascript
if (text) { text } else {"default text"}
para ser exato.if (object)
avalia como false se nãoobject
for definido. Corte semelhante ao estilo C se (ponteiro) que é avaliado como falso se o ponteiro tiver um valor 0 (NULL). Vale ressaltar que atext
variável usada para a propriedade de texto de um botão é retirada do escopo externo. Será muito mais claro comtext: inText ? inText : "default text"
if(inText) { text } else {"default text"}
if (text is true) then {text = text} else {text = "default text"}
- isso é preciso?if (text is true)
. Acho mais fácil pensar comoif (text *is*)
ouif (text exists)
. Outra boa fonte: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Esta resposta lança um aviso para mim.
Mudar
text
para emmodelText
vez disso gera um erro.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.
Usando
typeof
O
typeof
operador silencia o erro e funciona conforme o esperado.fonte
Para comparar com indefinido, você escreve
text === undefined
. Isso será avaliado como falso setext
fornull
.Se você deseja verificar se o valor está presente (ou seja, verifique os dois
undefined
enull
), 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, usevar textPresent = !!text
(embora o dobro!
possa parecer confuso para quem lê o código).fonte