有人可以向我解释一下我在以下设置中做错了什么。
想法是在engine.js中开发游戏引擎,UI逻辑在qml文件中。
页面.qml
Page {
id: page
SilicaGridView {
id: listView
model: ListModel {
id: roleList
Component.onCompleted: {
Engine.addRoles(roleList);
}
}
delegate: Rectangle {
id: delegate
border.color: model.selected ? Theme.highlightColor : Theme.primaryColor
Label {
text: qsTr(model.name)
}
MouseArea {
anchors.fill: parent;
onClicked: {
Engine.selectRole(model);
}
}
}
}
}
引擎.js:
function Role() {
this.name = "role"
this.selected = false;
}
function addRoles(list) {
list.append(new Role());
list.append(new Role());
}
function selectRole(role) {
console.log(role.selected) // <-- false
role.selected = true;
console.log(role.selected) // <-- false
}
因此,当我单击页面上的某个元素时,它会从引擎调用 selectRole。由于某些奇怪的原因,更新模型上的选定属性实际上并没有更新模型。为什么会这样?