2010-11-02 4 views
0

J'utilise ExtJS avec un XMLReader pour afficher le contenu d'un GridPanel. Cela fonctionne très bien, mais ma source XML a un nombre imprévisible d'éléments répétés:Gestion des données XML imprévisibles dans la grille ExtJS

<beamline> 
    <technique>Tomography</technique> 
    <technique>Phase contrast imaging</technique> 
    <technique>Microdiffraction</technique> 
    <technique>General diffraction</technique> 
</beamline> 

Il pourrait y avoir partout de 0-30 <technique> éléments.

Actuellement je tire ces manuellement dans le XMLReader en utilisant le: nième option (n):

{name: 'technique1', mapping: 'technique:nth(1)'}, 
{name: 'technique2', mapping: 'technique:nth(2)'}, 

puis les placer dans le panneau sous forme de colonnes et concaténer avec une fonction renderer:

{header: "Technique", width: 100, dataIndex: 'technique1', sortable: false, renderer: techniques}, 
{header: "Technique2", dataIndex: 'discipline2', hidden: true}, 

function techniques(val, x, store){ 
    return '<ul><li>'+val+'</li><li>'+store.data.technique2+'</li></ul>'; 
} 

mais cela est évidemment trop maladroit à l'échelle. Existe-t-il une méthode générique (en boucle ou XPath) pour obtenir un résultat similaire?

Répondre

0

Je n'ai pas utilisé le lecteur XML mais j'ai eu un problème similaire où j'ai dû afficher une ligne où une colonne pouvait contenir N éléments.

Screenshot showing problem

En supposant que la colonne des techniques contient un tableau d'objets, vous pouvez le rendre aussi

function techniquesRenderer(val){ 
    var returnValue = '<ul>'; 
    for(var v in val){ 
    var foo = val[v]; 
    returnValue += '<li>' + foo.someProperty + '</li>'; 
    } 
    return returnValue += '</ul> 
} 

Hope this helps.

+0

Merci, DanB, je vais essayer. – Jonas

Questions connexes