2013-04-11 5 views
4

Je sais comment analyser avec JSON et lier un fichier comme celui-ci à un listview:Comment lier un tableau à un ListView

[ 
{ 
    "key": "Arthur Schopenhauer", 
    "numeroFrasi": 3, 
    "foto" : "images/TEST.jpg", 
}, 
{ 
    "key": "Nietzsche", 
    "numeroFrasi": 1, 
    "foto" : "images/TEST.jpg", 
}, 
......... 

Mais je ne comprends pas, ni trouver sur le Web comment lier simplement tous les « frasi » (qui est un tableau) dans un fichier comme celui-ci:

[ 
{ 
    "key": "Arthur Schopenhauer", 
    "numeroFrasi": 3, 
    "foto" : "images/TEST.jpg", 
    "frasi": [ 
     "Fras1", 
     "Frase 2 schopenahuer", 
     "Frase 3 schopenhahuer" 
    ] 
}, 
{ 
    "key": "Nietzsche", 
    "numeroFrasi": 1, 
    "foto" : "images/TEST.jpg", 
    "frasi": [ 
     "Frase 2 nietzsche", 
     "Frase 3 nietzsche" 
    ] 
}, 
............... 

Mon objet est pas un tableau, mais il est DÉFINIES comme cette forme un fichier txt analysé avec JSON:

C'est la définition générique:

(function() { 
"use strict"; 

var list = new WinJS.Binding.List(); 
var groupedItems = list.createGrouped(
    function groupKeySelector(item) { return item.group.key; }, 
    function groupDataSelector(item) { return item.group; } 
); 


WinJS.xhr({ url: "/data/frasi.txt" }).then(function (xhr) { 
    var items = JSON.parse(xhr.responseText); 

    // Add the items to the WinJS.Binding.List 
    items.forEach(function (item) { 
     list.push(item); 
    }); 
}); 

Alors ceci est la définition spécifique (parce que quand je navigue sur ma page, je sélectionne juste un « élément », de sorte qu'une seule « clé « numeriFrasi », « foto », « frasi »:

WinJS.UI.Pages.define("/pages/itemDetail/itemDetail.html", { 

    ready: function (element, options) { 
     item = options && options.item ? Data.resolveItemReference(options.item) : Data.items.getAt(0); 

« resolveItemReference » obtient un élément de tous les éléments créés

Répondre

3

dépouilleront frasi s à un tableau premier. Vous pouvez utiliser underscore.js

frasis = YOUROBJECT.map(function(el){return el.frasi;}); 
frasis = _(frasis).faltten(); 

Utilisez ensuite pour construire votre ListView

+0

Salut! Merci de répondre. Je ne peux pas le faire fonctionner, parce qu'il dit que YOUROBJECT (bien sûr que j'ai placé myobject) ne supporte pas la fonction .map ... –

+1

J'ai supposé que votre objet est un tableau. (deuxième partie du code en question). Essayez _.map – Mohsen

+0

J'ai ajouté ma définition d'objet. J'espère que cela t'aides. (item.map ou item_.map ne fonctionne pas) –

Questions connexes