Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从QML中的ListModel访问Javascript数组元素_Javascript_Qml - Fatal编程技术网

从QML中的ListModel访问Javascript数组元素

从QML中的ListModel访问Javascript数组元素,javascript,qml,Javascript,Qml,我有一些javascript数据,其中包含包含其他对象和数组的对象列表,并将其附加到ListModel 例如(假设数据是在其他地方生成的,我希望避免其结构): 大多数部分工作正常,但我找不到访问子列表元素的方法。我所能得到的只是它们的数量,因为它们实际上是一个新的ListModel,但由于我不能使用诸如sublist.get(0)之类的东西,所以似乎不可能获得实际的内容 这是一个bug,还是我遗漏了什么?这个答案实际上来自于,如果模型可以是只读的,并且不需要动态模型更新,这是一个很好的解决方法

我有一些javascript数据,其中包含包含其他对象和数组的对象列表,并将其附加到ListModel

例如(假设数据是在其他地方生成的,我希望避免其结构):

大多数部分工作正常,但我找不到访问
子列表
元素的方法。我所能得到的只是它们的数量,因为它们实际上是一个新的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。谢谢,这确实起到了作用。我不需要让模型动态更新,所以这对我很好。