如果没有可用的模型数据,我可以用图像替换简单行吗

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 道歉,我已经编辑了问题和答案!希望这对你来说更清楚了!谢谢!

以上是关于如果没有可用的模型数据,我可以用图像替换简单行吗的主要内容,如果未能解决你的问题,请参考以下文章

如果资源可用且有效,则替换图像[重复]

在做图像处理时,如何提高识别算法的设计与效果的精度?

CoreData:用新版本替换数据模型?

视觉7个技巧助你提高图像识别模型准确率

将图像从GitHub上传到WordPress网站

用图像替换输入类型=文件