QML ListView由Javascript填充

时间:2011-04-28 12:07:06

标签: javascript listview qml

我刚刚意识到(根据一些QML Bugreport),ListView的JSON代理缺失了。所以我有两个选择,用Javascript或C ++创建的模型填充它

特别需要从预定义的URL下载.json数据并将它们解析为ListView。

我尝试在Javascript中创建对象数组并将关联数组推送到ListView作为模型,但它失败了。无论我如何修改代码。

那么只有C ++解决方案或我可以通过Javascript制作ListView模型吗?

由于

我试过的代码:

return [{"name":"value"}]
return {"name":"value"}
return [["name","value"]]

问题始终是:ReferenceError: Can't find variable: name

3 个答案:

答案 0 :(得分:19)

根据mouli@irc.freenode.net#qt的建议,请执行以下操作:

file:gui.qml

import "script.js" as Script

model: ListModel { id: list_model_id }

file:script.js

function makeList(id){
    id.append({"name":"value1"});
    id.append({"name":"value2"});
}

致电:

Script.makeList(list_model_id)

答案 1 :(得分:9)

可能有点晚了,但是使用Qt 5.5(可能更早,但测试5.5)你可以做到以下几点:

假设您有一个这样的数组:
var dataArray = [{"name":"A"},{"name":"B"},{"name":"C"}]

QML中用于显示此模型的代码:

ListView {
    model: dataArray //the array from above
    delegate: Label {
        text: dataArray[index].name
    }
}

将为代表提供index。它是模型中当前项的索引。有关详细信息,请参阅ListView delegate property

答案 2 :(得分:6)

使用Component.onCompleted更容易:

model: ListModel {
    Component.onCompleted: {
        append({"name": "A"});
        append({"name": "B"});
        append({"name": "C"});
    }
}