我有一个对象的 ListModel,它可能有也可能没有 myvis
参数(用于可见性)。如果 myvis === true
,ListView 委托(delegate)应该是可见的。如果未定义 myvis
,我想假设 myvis === true
为了检查 myvis
是否已定义和/或存在,我尝试了 3 种方法:
return (typeof myvis) === 'undefined' ?真:myvis
返回 myvis === null ?真:myvis
返回 hasOwnProperty("myvis") ? myvis : true
这些都没有成功;看下面的代码输出
import QtQuick 2.9
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
ListModel {
id: myjson
ListElement {
displayName: "Planes"
myvis: false
}
ListElement {
displayName: "Trains"
myvis: true
}
ListElement {
displayName: "Automobiles"
}
}
ListView {
model: myjson
anchors.fill: parent
delegate: Text {
text: displayName
visible: {
console.log("typeof " + displayName + ":myvis is " + (typeof myvis))
console.log("hasOwnProperty " + hasOwnProperty("myvis"))
console.log(displayName + " is " + myvis)
//if myvis is not defined, assume it to be TRUE
return (hasOwnProperty("myvis") ? myvis : true)
}
}
}
}
我得到的输出:
qml: typeof Planes:myvis is boolean
qml: hasOwnProperty false
qml: Planes is false
qml: typeof Trains:myvis is boolean
qml: hasOwnProperty false
qml: Trains is true
qml: typeof Automobiles:myvis is boolean
qml: hasOwnProperty false
qml: Automobiles is false
我期望的输出:
qml: typeof Planes:myvis is boolean
qml: hasOwnProperty true
qml: Planes is false
qml: typeof Trains:myvis is boolean
qml: hasOwnProperty true
qml: Trains is true
qml: typeof Automobiles:myvis is undefined
qml: hasOwnProperty false
qml: Automobiles is undefined
编辑 如果模型是 JSON 对象和非 QML,那么它可以工作:
property var myjson: [
{
displayName: "planes",
myvis: false
},
{
displayName: "trains",
myvis: true
},
{
displayName: "automobiles"
}
]
ListView {
model: myjson
anchors.fill: parent
delegate: Text {
text: modelData.displayName
visible: {
console.log("typeof " + modelData.displayName + ":myvis is " + (typeof modelData.myvis))
console.log("hasOwnProperty " + modelData.hasOwnProperty("myvis"))
console.log(modelData.displayName + " is " + modelData.myvis)
//if myvis is not defined, assume it to be TRUE
return (modelData.hasOwnProperty("myvis") ? modelData.myvis : true)
}
}
}
输出完全符合预期。有没有办法在保留 ListModel 和 ListElements 的同时获得此输出?
最佳答案
如果你只是设置 myvis !== false
会发生什么我想这就是你要找的。如果它不等于假,你只需要展示你的东西。
关于javascript - 如何检查 JSON 对象参数是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59416506/