如果没有可用的模型数据,我可以用图像替换简单行吗
Posted
技术标签:
【中文标题】如果没有可用的模型数据,我可以用图像替换简单行吗【英文标题】:Can I Replace SimpleRow with Image if no modelData avaliable 【发布时间】:2019-04-01 23:50:17 【问题描述】:我有一个ListView
,其中当前显示的modelData
会随着按钮在多个部门 选项中循环而变化。如果其中一个部门没有数据,我的delegate
会继续显示之前的列表数据,直到到达modelData
的新部分,其中包含数据。
我想要做的是,当模型为“空”(未定义,当它正在寻找的密钥尚未在我的 Firebase 数据库中创建,或者当前没有项目可见时,可能会发生这种情况),文本/改为显示图像;即“现在继续前进,这里没什么可看的”。
我的模型是从 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
。
我尝试过使用图像/文本可见性,但问题更多在于清除 modelData
,我不确定从哪里开始?
非常感谢任何帮助!
【问题讨论】:
delegate: someCondition ? Component1 : Component2
呢?
嗨@folibis 感谢您的指导,我尝试过诸如delegate: if(Object.keys(dataModel.calendarUserItems[departments[currGroupIndex]]).length > 0
或!=
之类的东西,但我只收到了布尔?
意外令牌'?' 上的错误。检查模型数据是否不为空,或者是否有对象在使用长度范围内?
@folibis 自从我上次发表评论以来,我一直在考虑你的建议,但仍然无法取得任何进展——我的 modelData
来自一个数组,而某些项目不是 @ 987654339@,我不能做诸如model.count > 0 ? Component1 : Component2
之类的事情,我可以选择检查是否根本没有modelData
,或者SimpleRow
委托中是否没有visible
项目?跨度>
modelData
不能为空,因为引擎将模型作为数组并将对每个项目的引用作为modelData
应用于委托项目。至于visible
属性,你能用delegate: modelData.visible ? Component1 : Component2
吗?
嗨@folibis 我认为我目前的主要问题是我的readonly property var calendarUserItem: dataModel.calendarUserItems[departments[currGroupIndex]][modelData] ||
当currGroupIndex
没有数据、可见或在数据库中时,它会出错并且不会删除以前的currGroupIndex
查看?
【参考方案1】:
我已经通过使用以下作为我的委托实现了显示:
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 = []
以在每次按下时清除数组,这按预期工作。
谢谢!
【讨论】:
我不完全确定您的最后一段...数据库是什么?是dataModel.calendarUserItems
吗?是否有特定的错误消息?
嗨@TrebledJ 道歉,我已经编辑了问题和答案!希望这对你来说更清楚了!谢谢!以上是关于如果没有可用的模型数据,我可以用图像替换简单行吗的主要内容,如果未能解决你的问题,请参考以下文章