Глубоко вложенный XML
-
22-09-2019 - |
Вопрос
Я пытаюсь отобразить список элементов в сетке данных из XMLList.
<Series no="1">
<file>
<filenum>1</epnum>
<prodnum>4V01</prodnum>
<title>Series #1 - File #1</title>
</file>
<file>
<filenum>2</epnum>
<prodnum>4V02</prodnum>
<title>Series #1 - File #2</title>
</file>
</Series>
<Series no="2">
<file>
<filenum>1</epnum>
<prodnum>4V01</prodnum>
<title>Series #2 - File #1</title>
</file>
<file>
<filenum>2</epnum>
<prodnum>4V02</prodnum>
<title>Series #2 - File #2</title>
</file>
</Series>
Мой текущий код позволяет мне извлекать каждую серию в XMLList, а затем у меня есть класс вложенной сетки данных, который позволяет мне делать такие вещи, как.
<classes:NestedDataGrid width="100%" height="100%" id="gridFiles" dataProvider="{filesList}" >
<classes:columns>
<mx:DataGridColumn headerText="Season" dataField="@no" width="60"/>
<mx:DataGridColumn headerText="Episode" dataField="file.filenum" width="60"/>
<mx:DataGridColumn headerText="Title" dataField="file.title"/>
</classes:columns>
</classes:NestedDataGrid>
Однако при этом отображается сетка данных с двумя строками: первая строка имеет 1 в столбце «Серия», а затем два файла втиснуты во вторую ячейку в той же строке.Вторая строка такая же, но в столбце «Серия» указана цифра 2, а в ячейке рядом с ней втиснуты два файла серии №2.
Если я не использую вложенный класс данных, я могу вместо этого извлечь файлы, используя Series.file, и все 4 файла в списке правильно, однако я не получаю номер серии для каждого...
Решение
С текущей структурой XML его проще представить с помощью сетки из двух столбцов: первый столбец представляет собой номер серии, а второй столбец представляет собой еще один столбец DataGrid с 2 или 3 столбцами, который отображает сведения о файле.Но если вы не хотите менять структуру, вам понадобится следующий код.Обратите внимание, что поскольку dataField
свойство не установлено, необходимо указать sortCompareFunction
для сортировки сетки по номеру серии — в противном случае при попытке сортировки могут возникнуть исключения.
<classes:NestedDataGrid width="100%" height="100%" id="gridFiles"
dataProvider="{filesList.Series.file}" >
<classes:columns><!-- classes copy pasted from OP's code. Whats that? -->
<mx:DataGridColumn headerText="Season" labelFunction="getSeries" width="60"/>
<mx:DataGridColumn headerText="Episode" dataField="filenum" width="60"/>
<mx:DataGridColumn headerText="Title" dataField="title"/>
</classes:columns>
</classes:NestedDataGrid>
private function getSeries(item:Object, col:DataGridColumn):String
{
return XML(item).parent().@no;
}
ОБНОВЛЯТЬ:
<mx:DataGrid width="100%" height="100%" id="gridFiles" >
<mx:columns>
<mx:DataGridColumn headerText="Season" labelFunction="getSeries" width="60"/>
<mx:DataGridColumn headerText="Episode" dataField="epnum" width="60"/>
<mx:DataGridColumn headerText="Title" dataField="title"/>
</mx:columns>
</mx:DataGrid>
gridFiles.dataProvider = XML(event.result).descendants('episode');
//use the same getSeries function as above