Antworten:
Versuchen:
text: text ? text : "default text"
"undefined"ist nur eine Zeichenfolgendarstellung einer Referenz, die nichts genau wie Noneoder NULLin anderen Sprachen referenziert .
===Wenn es sich um einen strengen Vergleichsoperator handelt, möchten Sie möglicherweise diesen Thread lesen: /programming/523643/difference-between-and-in-javascript
if (text) { text } else {"default text"}um genau zu sein. if (object)wird zu false ausgewertet, wenn objectundefiniert ist. Ähnliches Hacking wie C-style if (Zeiger), das false ergibt, wenn der Zeiger den Wert 0 (NULL) hat. Es ist erwähnenswert, dass textdie für die Texteigenschaft einer Schaltfläche verwendete Variable außerhalb des Gültigkeitsbereichs liegt. Es wird viel klarer mit: text: inText ? inText : "default text"oderif(inText) { text } else {"default text"}
if (text is true) then {text = text} else {text = "default text"}- ist das korrekt?
if (text is true). Ich finde es einfacher, als if (text *is*)oder zu denken if (text exists). Eine weitere gute Quelle: 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"
}
Diese Antwort warnt mich.
QML Button: Binding loop detected for property "text"
Das Ändern textauf löst modelTextstattdessen einen Fehler aus.
ReferenceError: modelText is not defined
Dies stoppt die Ausführung von Javascript für mich; dh die nächste Zeile wird nicht aufgerufen.
Das gleiche passiert, wenn es über Javascript eingestellt wird, ist aber ziemlich ausführlich.
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: "default text"
Component.onCompleted: {
if (modelText !== "undefined") {
myButton.text = modelText;
}
}
}
typeofDer typeofBediener schaltet den Fehler stumm und arbeitet wie erwartet.
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: "default text"
Component.onCompleted: {
if (typeof modelText !== "undefined") {
myButton.text = modelText;
}
}
}
Zum Vergleich mit undefined schreibst du text === undefined. Dies wird zu false ausgewertet, wenn textist null.
Wenn Sie überprüfen möchten, ob ein Wert vorhanden ist (dh, ob beide undefinedund vorhanden sind null), verwenden Sie ihn als Bedingung in der if-Anweisung oder im ternären Operator. Wenn Sie das Ergebnis des Vergleichs als booleschen Wert speichern müssen, verwenden Sie var textPresent = !!text(obwohl double !möglicherweise verwirrend erscheint, wenn Sie den Code lesen).