Я создаю listView
, где мой делегат и его информация поступают из JSON - Моя проблема в том, что я пытаюсь установить section.property
из вложенной области в пределах JSON. Вложенные данные будут динамическими c, поэтому мне нужно работать так, чтобы они адаптировались к каждому пользователю приложения.
Документация, с которой я работаю: JsonListModel & SortFilterProxyModel
Примером моего JSON будет:
[{
"firstname":"Edward",
"subGroup":"Reception",
"admin":1,
"roles":
{"Assistant":0,"Reception":1,"Stylist":1,"Technical":0
}
},
{
"firstname":"Claire",
"subGroup":"Stylist",
"admin":1,
"roles":
{"Assistant":1,"Reception":0,"Stylist":1,"Technical":0
}
}]
Я работаю с использованием JsonListModel
, QT Creator, минимальный раздел моего кода: ниже:
import Felgo 3.0
import QtQuick 2.0
Page {
id: editAdmins
property var newArr: dataModel.calendarUserItems.users
property var userRoles: ({})
property var l
JsonListModel { // list model for json data
id: jsonModel
source: dataModel.jsonList // my full JSON
keyField: "firstname " + " surname"
fields: ["firstname", "surname", "subGroup", "admin", "email", "roles"]
}
SortFilterProxyModel { // SortFilterProxyModel for sorting or filtering lists
id: sortedModel
// Note: when using JsonListModel, the sorters or filter might not be applied correctly when directly assigning sourceModel
// use the Component.onCompleted handler instead to initialize SortFilterProxyModel
Component.onCompleted: sourceModel = jsonModel
sorters: [
RoleSorter {
id: groupSorter
roleName: "subGroup"
},
]
}
AppListView {
id:view
model: sortedModel
anchors.fill: parent
section.property: "subGroup" //How I have used it previously before needing to set 'roles' as my property (which shows nothing)
section.delegate: SimpleSection {}
delegate: SimpleRow {
id: container
text: model.firstname
detailText: model.surname
}
}
}
Из вышеприведенного JSON ожидаемый результат будет состоять в том, что мой listView имеет 4 секции из гнезда roles
. Assistant, Reception, Stylist, Technical
Мой вопрос: Я хотел бы использовать roles
в качестве моего ListView {section.property}
, и видимость пользователей зависит от их логического значения в этой роли - поэтому от приведенный выше пример; Эдвард будет виден как в приеме, так и в стилисте, тогда как Клэр будет видна как в помощнике, так и в стилисте!
Как определить вложенное JSON как свойство раздела в моем списке?
------ Обновление ------
Добавив дополнительные proxyRole
в мои SortFilterProxyModel { }
, как показано:
proxyRoles: ExpressionRole {
name: "role"
expression: JSON.stringify(model.roles)
}
и изменяя section.property:
на «роль», я могу создавать разделы для тех, у кого совпадающие роли, ближе, но все же не так, как задумано (см. прилагаемый скриншот)
Я попытался просмотреть данные во многих вариациях:
expression: {
for(var x in model.roles){
if(model.roles[x] === 1){
x
}
}
}
и либо возвращали окончательный индекс (как и ожидалось выше), либо снова, перемещая элементы в новый массив, но все равно возвращая их все в результате.