Qmlでプロパティが未定義かどうかをどのように確認しますか?
これは私がやろうとしていることです:
Button {
id: myButton
text: if (text === "undefined"){"default text"}
}
試してください:text: text ? text : "default text"
"undefined"
は、他の言語のNone
またはNULL
のように、何も参照していない参照の単なる文字列表現です。
===
は厳密な比較演算子です。次のスレッドを読むことをお勧めします。 https://stackoverflow.com/questions/523643/difference-between-and-in-javascript
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: text ? text : "default text"
}
この答えは私に警告を投げます。
QML Button: Binding loop detected for property "text"
代わりにtext
をmodelText
に変更すると、エラーがスローされます。
ReferenceError: modelText is not defined
これにより、Javascriptの実行が停止します。つまり、次の行は呼び出されません。
Javascriptで設定する場合も同じことが起こりますが、非常に冗長です。
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: "default text"
Component.onCompleted: {
if (modelText !== "undefined") {
myButton.text = modelText;
}
}
}
typeof
を使用typeof
演算子はエラーをミュートし、期待どおりに機能します。
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: "default text"
Component.onCompleted: {
if (typeof modelText !== "undefined") {
myButton.text = modelText;
}
}
}
未定義と比較するには、text === undefined
と記述します。 text
がnull
の場合、これはfalseと評価されます。
値が存在するかどうかを確認する場合(つまり、undefined
とnull
の両方を確認する場合)、ifステートメントまたは三項演算子の条件として使用します。比較の結果をブール値として保存する必要がある場合は、var textPresent = !!text
を使用します(ただし、二重の!
はコードを読んでいる人を混乱させるかもしれません)。