2010-11-02 5 views
0

Я использую ExtJS с XMLReader для отображения содержимого в GridPanel. Это прекрасно работает, однако мой источник XML имеет непредсказуемое количество повторяющихся элементов:Обработка непредсказуемых данных XML в сетке ExtJS

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

Там может быть где-нибудь от 0-30 <technique> элементов.

В настоящее время я потянув их вручную в XMLReader с помощью: NTH (п) вариант:

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

и затем помещая их в панели в виде столбцов и конкатенации с функцией визуализатора:

{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>'; 
} 

, но это, очевидно, слишком неуклюжий в масштабе. Существует ли общий метод (loop или XPath-style) для достижения аналогичного результата?

ответ

0

Я не использовал читатель XML, но у меня была аналогичная проблема, когда мне приходилось отображать строку, в которой столбец мог содержать N элементов.

Screenshot showing problem

Предполагая, что столбец содержит методы массива объектов, которые вы могли бы сделать его, как

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

Надеется, что это помогает.

+0

Спасибо, DanB, я отдам это. – Jonas