如何检查 qml 中的属性是否未定义?
这就是我想做的事情:
Button {
id: myButton
text: if (text === "undefined"){"default text"}
}
答案1
尝试:
text: text ? text : "default text"
"undefined"
仅仅是一个引用的字符串表示,不引用任何东西,就像None
或NULL
其他语言中的一样。
===
是严格的比较运算符,你可能需要阅读这个帖子:https://stackoverflow.com/questions/523643/difference-between-and-in-javascript
答案2
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
通过 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;
}
}
}
答案3
要与未定义进行比较,请写入。如果为,text === undefined
则计算结果为 false 。text
null
如果您想要检查值是否存在(即检查undefined
和null
),请将其用作 if 语句或三元运算符中的条件。如果您需要将比较结果存储为布尔值,请使用var textPresent = !!text
(尽管 double!
可能会让阅读代码的人感到困惑)。