从QML中的ListModel访问Javascript数组元素
我有一些javascript数据,其中包含包含其他对象和数组的对象列表,并将其附加到ListModel 例如(假设数据是在其他地方生成的,我希望避免其结构): 大多数部分工作正常,但我找不到访问从QML中的ListModel访问Javascript数组元素,javascript,qml,Javascript,Qml,我有一些javascript数据,其中包含包含其他对象和数组的对象列表,并将其附加到ListModel 例如(假设数据是在其他地方生成的,我希望避免其结构): 大多数部分工作正常,但我找不到访问子列表元素的方法。我所能得到的只是它们的数量,因为它们实际上是一个新的ListModel,但由于我不能使用诸如sublist.get(0)之类的东西,所以似乎不可能获得实际的内容 这是一个bug,还是我遗漏了什么?这个答案实际上来自于,如果模型可以是只读的,并且不需要动态模型更新,这是一个很好的解决方法
子列表
元素的方法。我所能得到的只是它们的数量,因为它们实际上是一个新的ListModel,但由于我不能使用诸如sublist.get(0)
之类的东西,所以似乎不可能获得实际的内容
这是一个bug,还是我遗漏了什么?这个答案实际上来自于,如果模型可以是只读的,并且不需要动态模型更新,这是一个很好的解决方法 解决方案基本上就是将javascript对象设置为listview模型,并通过
modelData
关键字访问委托中的元素
import QtQuick 2.0
Rectangle {
width: 600
height: 300
ListView {
anchors.fill: parent
delegate: Text {
text: 'key: '+ modelData.key + ', subdict["subkey1"]: ' + modelData.subdict.subkey1 +
', sublist.length: '+ modelData.sublist.length + ', sublist[0]: '+ modelData.sublist[0] +
', sublist: ['+ modelData.sublist + ']'
wrapMode: Text.WordWrap
width: parent.width
color: index % 2 == 0 ? "darkgreen" : "brown"
}
Component.onCompleted: {
model = [
{'key': 'foo1', 'subdict': {'subkey1': 'subfoo1', 'subkey2': 'subbar1'},
'sublist': ['subvalue1', 'subvalue2']},
{'key': 'foo2', 'subdict': {'subkey1': 'subfoo2', 'subkey2': 'subbar2'},
'sublist': ['subvalue3', 'subvalue4', 'subvalue5']},
{'key': 'foo3', 'subdict': {'subkey1': 'subfoo3', 'subkey2': 'subbar4'},
'sublist': []}
]
}
}
}
这个答案实际上来自,如果模型可以是只读的,并且不需要动态模型更新,那么这是一个很好的解决方法 解决方案基本上就是将javascript对象设置为listview模型,并通过
modelData
关键字访问委托中的元素
import QtQuick 2.0
Rectangle {
width: 600
height: 300
ListView {
anchors.fill: parent
delegate: Text {
text: 'key: '+ modelData.key + ', subdict["subkey1"]: ' + modelData.subdict.subkey1 +
', sublist.length: '+ modelData.sublist.length + ', sublist[0]: '+ modelData.sublist[0] +
', sublist: ['+ modelData.sublist + ']'
wrapMode: Text.WordWrap
width: parent.width
color: index % 2 == 0 ? "darkgreen" : "brown"
}
Component.onCompleted: {
model = [
{'key': 'foo1', 'subdict': {'subkey1': 'subfoo1', 'subkey2': 'subbar1'},
'sublist': ['subvalue1', 'subvalue2']},
{'key': 'foo2', 'subdict': {'subkey1': 'subfoo2', 'subkey2': 'subbar2'},
'sublist': ['subvalue3', 'subvalue4', 'subvalue5']},
{'key': 'foo3', 'subdict': {'subkey1': 'subfoo3', 'subkey2': 'subbar4'},
'sublist': []}
]
}
}
}
可能与(等等)有关?模型是只读的吗?如果是这种情况,您可以直接使用javascript结构(
var values=[…]
)类似于模型,并使用“modelData”关键字访问委托中的每个项。请记住,这样模型中的任何更改都不会被绘制,因此您应该刷新整个listview。谢谢,这确实起到了作用。我不需要动态更新模型,所以这对我很好。可能与(等等)有关?模型是只读的吗?如果是这种情况,您可以直接使用javascript结构(var values=[…]
)类似于模型,并使用“modelData”关键字访问委托中的每个项。请记住,这样模型中的任何更改都不会被绘制,因此您应该刷新整个listview。谢谢,这确实起到了作用。我不需要让模型动态更新,所以这对我很好。