Não sou especialista em JSONListModel, portanto, posso estar enganado, mas parece que espero iterar em uma lista de objetos. O que você recebe do rad.io é uma lista de strings, o que parece estar causando seus problemas. Mas como você não precisa fazer nenhum processamento sofisticado do resultado, é fácil fazer isso manualmente.
O que você quer fazer é analisar a resposta em uma lista (usando JSON.parse
). Então você pode percorrer os elementos da lista. Para cada um, crie um objeto e anexe-o a um ListModel
. Observe que o ListModel
aceita objetos , não seqüências de caracteres. Em seguida, o delegado pode referenciar as propriedades desses objetos.
Exemplo de código:
import QtQuick 2.0
import Ubuntu.Components 1.1
import Ubuntu.Components.ListItems 1.0 as ListItem
MainView {
width: 300
height: 600
property string source: "http://www.rad.io/info/menu/valuesofcategory?category=_genre"
ListModel {
id: listModel
}
Component.onCompleted: {
var xhr = new XMLHttpRequest;
xhr.open("GET", source);
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
var list = JSON.parse(xhr.responseText);
listModel.clear();
for (var i in list)
listModel.append({ "genre": list[i] });
}
}
xhr.send();
}
Page {
title: i18n.tr("by Genre")
UbuntuListView {
height: parent.height
width: parent.width
clip: true
model: listModel
cacheBuffer: contentHeight
delegate: ListItem.Standard {
text: index + " " + genre
}
}
}
}
Deixe-me levar um momento para lembrá-lo da importância de postar exemplos corretos, curtos e autônomos . O código que você postou não pôde ser executado devido a nenhum problema com a análise do JSON, mas porque um Tab
não pode ser um widget de nível superior. Qualquer um que tentou ajudá-lo primeiro teve que descobrir isso antes de chegar ao problema real.
Além disso, ao usar um componente não padrão, como JSONListModel
, anote esse fato e indique onde ele pode ser encontrado. Quanto menos trabalho for necessário para reproduzir o problema, melhor.