Risposte:
Provare:
text: text ? text : "default text"
"undefined"
è solo una rappresentazione in forma di stringa di un riferimento che non fa riferimento a nulla, proprio None
o NULL
in altre lingue.
===
è un operatore di confronto rigoroso, potresti voler leggere questa discussione: /programming/523643/difference-between-and-in-javascript
if (text) { text } else {"default text"}
per essere precisi. if (object)
restituisce false se object
non è definito. Hack simile a C-style if (puntatore) che restituisce false se il puntatore ha un valore pari a 0 (NULL). Vale la pena notare che la text
variabile utilizzata per la proprietà text di un pulsante viene presa dall'ambito esterno. Sarà molto più chiaro con: text: inText ? inText : "default text"
oppureif(inText) { text } else {"default text"}
if (text is true) then {text = text} else {text = "default text"}
- è esatto?
if (text is true)
. Trovo più facile pensare come if (text *is*)
o if (text exists)
. Un'altra buona fonte: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: text ? text : "default text"
}
Questa risposta mi lancia un avvertimento.
QML Button: Binding loop detected for property "text"
Cambiare text
per modelText
invece genera un errore.
ReferenceError: modelText is not defined
Questo interrompe l'esecuzione di Javascript per me; cioè la linea successiva non viene chiamata.
Lo stesso succede quando lo si imposta tramite Javascript, ma è abbastanza dettagliato.
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' typeof
operatore silenzia l'errore e funziona come previsto.
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: "default text"
Component.onCompleted: {
if (typeof modelText !== "undefined") {
myButton.text = modelText;
}
}
}
Per confrontare con undefined scrivi text === undefined
. Questo valuterà falso se lo text
è null
.
Se si desidera verificare se è presente un valore (ovvero, verificare sia per undefined
e null
), utilizzarlo come condizione in istruzione if o operatore ternario. Se è necessario memorizzare il risultato del confronto come valore booleano, utilizzare var textPresent = !!text
(anche se double !
potrebbe apparire confuso a chi legge il codice).