如果没有可用的模型数据,我可以用图像替换简单行吗
Can I Replace SimpleRow with Image if no modelData avaliable
我有一个 ListView
,其中当前显示的 modelData
随着按钮循环显示几个 部门 选项而变化。如果其中一个部门没有数据,我的 delegate
会继续显示之前的列表数据,直到它到达 modelData
的一个包含数据的新部分。
我想要做的是,当模型 'empty'(未定义,当它正在寻找的键尚未在我的 Firebase 数据库中创建,或者当前没有项目可见时,可能会发生这种情况), text/image 改为显示;即 "Move along now, nothing to see here".
我的模型取自JSON,例子如下。我的 calendarUserItems
是我的 Firebase 数据库中多个子节点的根节点,我的 AppButton.groupCycle
的目的也是为每个子节点添加一个进一步的方向,以此过滤数据以在页。
我的代码示例是:
Page {
id: adminPage
property var departments: [1,2,3,4]
property int currGroupIndex: 0
AppButton {
id: groupCycle
text: "Viewing: " + departments[currGroupIndex]
onClicked: {
if (currGroupIndex == departments.length - 1)
currGroupIndex = 0;
else
currGroupIndex++;
}
}
ListView {
model: Object.keys(dataModel.calendarUserItems[departments[currGroupIndex]])
delegate: modelData.visible ? currentGroupList : emptyHol
Component {
id: emptyHol
AppText {
text: "nothing to see here move along now!"
}
}
Component {
id: currentGroupList
SimpleRow {
id: container
readonly property var calendarUserItem: dataModel.calendarUserItems[departments[currGroupIndex]][modelData] || {}
visible: container.calendarUserItem.status === "pending" ? true : false
// only pending items visible
// remaining code for simple row
}
}
}
}
我的 dataModel.calendarUserItems
中 JSON 的一个例子是:
"groupName": [
{ "department1":
{ "1555111624727" : {
"creationDate" : 1555111624727,
"date" : "2019-03-15T12:00:00.000",
"name" : "Edward Lawrence",
"status": "pending"
},
//several of these entries within department1
},
},
{ "department2":
{ "1555111624727" : {
"creationDate" : 1555111624456,
"date" : "2019-05-1T12:00:00.000",
"name" : "Katie P",
"status": 1
},
//several of these entries within department2
},
}
//departments 3 & 4 as the same
]
如果部门2和部门3有modelData
,而部门1和部门4没有,我想显示文字,把ListView
清空,而不是显示前面的modelData
.
我试过 image/text 可见性,但问题更多在于清除 modelData
,我不确定从哪里开始?
非常感谢任何帮助!
我通过使用以下作为我的代表实现了显示:
delegate: {
if (!(departments[currGroupIndex] in dataModel.calendarUserItems) ) {
return emptyHol;
}
var subgroups = Object.keys(dataModel.calendarUserItems[departments[currGroupIndex]]);
for (var i in subgroups) {
var subgroup = dataModel.calendarUserItems[departments[currGroupIndex]][subgroups[i]];
modelArr.push(subgroup);
}
var modelObect = modelArr.find( function(obj) { return obj.status === "pending"; } );
if (modelObect === undefined) {
return emptyHol;
}
return currentGroupList;
}
然后当我的 AppButton.groupCycle
被按下时,我添加了 modelArr = []
以在每次按下时清除数组,这按预期工作。
谢谢!
我有一个 ListView
,其中当前显示的 modelData
随着按钮循环显示几个 部门 选项而变化。如果其中一个部门没有数据,我的 delegate
会继续显示之前的列表数据,直到它到达 modelData
的一个包含数据的新部分。
我想要做的是,当模型 'empty'(未定义,当它正在寻找的键尚未在我的 Firebase 数据库中创建,或者当前没有项目可见时,可能会发生这种情况), text/image 改为显示;即 "Move along now, nothing to see here".
我的模型取自JSON,例子如下。我的 calendarUserItems
是我的 Firebase 数据库中多个子节点的根节点,我的 AppButton.groupCycle
的目的也是为每个子节点添加一个进一步的方向,以此过滤数据以在页。
我的代码示例是:
Page {
id: adminPage
property var departments: [1,2,3,4]
property int currGroupIndex: 0
AppButton {
id: groupCycle
text: "Viewing: " + departments[currGroupIndex]
onClicked: {
if (currGroupIndex == departments.length - 1)
currGroupIndex = 0;
else
currGroupIndex++;
}
}
ListView {
model: Object.keys(dataModel.calendarUserItems[departments[currGroupIndex]])
delegate: modelData.visible ? currentGroupList : emptyHol
Component {
id: emptyHol
AppText {
text: "nothing to see here move along now!"
}
}
Component {
id: currentGroupList
SimpleRow {
id: container
readonly property var calendarUserItem: dataModel.calendarUserItems[departments[currGroupIndex]][modelData] || {}
visible: container.calendarUserItem.status === "pending" ? true : false
// only pending items visible
// remaining code for simple row
}
}
}
}
我的 dataModel.calendarUserItems
中 JSON 的一个例子是:
"groupName": [
{ "department1":
{ "1555111624727" : {
"creationDate" : 1555111624727,
"date" : "2019-03-15T12:00:00.000",
"name" : "Edward Lawrence",
"status": "pending"
},
//several of these entries within department1
},
},
{ "department2":
{ "1555111624727" : {
"creationDate" : 1555111624456,
"date" : "2019-05-1T12:00:00.000",
"name" : "Katie P",
"status": 1
},
//several of these entries within department2
},
}
//departments 3 & 4 as the same
]
如果部门2和部门3有modelData
,而部门1和部门4没有,我想显示文字,把ListView
清空,而不是显示前面的modelData
.
我试过 image/text 可见性,但问题更多在于清除 modelData
,我不确定从哪里开始?
非常感谢任何帮助!
我通过使用以下作为我的代表实现了显示:
delegate: {
if (!(departments[currGroupIndex] in dataModel.calendarUserItems) ) {
return emptyHol;
}
var subgroups = Object.keys(dataModel.calendarUserItems[departments[currGroupIndex]]);
for (var i in subgroups) {
var subgroup = dataModel.calendarUserItems[departments[currGroupIndex]][subgroups[i]];
modelArr.push(subgroup);
}
var modelObect = modelArr.find( function(obj) { return obj.status === "pending"; } );
if (modelObect === undefined) {
return emptyHol;
}
return currentGroupList;
}
然后当我的 AppButton.groupCycle
被按下时,我添加了 modelArr = []
以在每次按下时清除数组,这按预期工作。
谢谢!