首页 > 解决方案 > 如果没有可用的模型数据,我可以用 Image 替换 SimpleRow

问题描述

我有一个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
            }
        }
    }
}

我的 JSON 示例dataModel.calendarUserItems是:

"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,我不确定从哪里开始?

任何帮助是极大的赞赏!

标签: qtlistviewmodelqmlv-play

解决方案


我通过使用以下作为我的代表实现了显示:

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 = []了在每次按下时清除数组,这按预期工作。

谢谢!


推荐阅读