У меня есть простая модель представления с традиционным отношением «один ко многим»: у клиентов есть заказы.
Я создаю таблицу, в которой каждая строка имеет имя клиента, а за ним следует строка заказов. Все работает отлично, но, к сожалению, у немногих клиентов одинаковое количество заказов, поэтому построение таблицы в конечном итоге выглядит как гистограмма.
Я знаю, что для этого есть стандартное решение, но я не могу понять это. Я хочу, чтобы каждая строка содержала одинаковое количество ячеек. Я рассматривал возможность добавления фиктивных данных в свою модель, но это плохо пахнет. Я могу получить максимально возможное количество заказов, но я не могу понять, как разработать шаблон, который может использовать любую эту информацию для создания унифицированных таблиц. Вот что у меня есть до сих пор:
//#data is my ViewModel containing a few other things
<table id="ordersTable">
<!--header stuff-->
<tbody>
{{for #data.Customers tmpl='tmplRow' /}}
</tbody>
// OrderRow.tmpl.html
{{if #index % 2 == 0}}
<tr class="tableRowAlt1">
{{else}}
<tr class="tableRowAlt2">
{{/if}}
<td>{{>Name}}</td>
<td></td>
{{for Orders }}
<td>
{{>OrderId}}
</td>
{{/for}}
</tr>
EDIT: So I've decided to just force the numbe of columns, but now I'm getting some strange behavior on my new template:
// OrderRow.tmpl.html
{{if #index % 2 == 0}}
<tr class="tableRowAlt1">
{{else}}
<tr class="tableRowAlt2">
{{/if}}
<td>{{>Name}}</td>
<td>
{{>Order[0].Id}}
</td>
<td>
{{>Order[1].Id}}
</td>
<!--...-->
</tr>
Это рендеринг «Order.0 имеет значение null или не является объектом». Я проверил, что в каждой строке есть данные, но шаблон считает, что это не так. Я предполагаю, что это как-то связано с тем фактом, что я ищу элементы массива, но я не уверен, как получить доступ к элементам по индексу таким образом, который примет jsRender.