Попытка перебрать список параметров для элемента, но не распечатать последний вариант
<#list orderItem.options as option>
<tr>
<td class="order-item-detail">
${option.name} :
</td>
</tr>
<tr>
<td class="order-item-red">
${option.value}
</td>
</tr>
</#list>
Приведенный выше код (внутри html) - это то, что я использую для того, чтобы просмотреть список параметров внутри элемента. В настоящий момент он просматривает все параметры и печатает их все. Однако я хотел бы сделать так, чтобы он не печатал окончательный вариант внутри этого списка.
Я немного ограничен, потому что я должен сделать это только через HTML. Я предполагаю, что мне нужен какой-то тип оператора if, чтобы либо сказать ему, чтобы он остановился, когда он достигнет последней опции, либо конкретно указать, на каком содержимом опции остановиться, но я не могу понять, как его написать.
2 ответа
option_index
дает вам индекс текущей опции и ?size
дает вам длину, вам просто нужно сравнить их с оператором if
option_index
на основе 0, поэтому вам нужно минус 1 от размера, чтобы не включать последний элемент
Примечание - вы также можете использовать option?index
получить индекс, в зависимости от того, какую версию freemarker вы используете, но option_index
будет работать как в новых версиях freemarker, так и в более старых
Для полноты я также добавлю ?is_last
, кредит идет на ответ ддеканы, использование <#if option?is_last>
В целом, если у вас есть обновленная версия freemarker, оператор if можно записать так
Обновлено - предполагается, что Freemarker 2.3.23 или более поздняя версия
<#if option?is_last>
....
</#if>
Оригинальный ответ
<#list orderItem.options as option>
<#if option_index < orderItem.options?size - 1>
<tr>
<td class="order-item-detail">
${option.name} :
</td>
</tr>
<tr>
<td class="order-item-red">
${option.value}
</td>
</tr>
</#if>
</#list>
Документация по размеру
https://freemarker.apache.org/docs/ref_builtins_sequence.html
Количество подэлементов в последовательности (в виде числового значения). Максимально возможный индекс в последовательности s равен s? Size - 1 (поскольку индекс первой субвариабельности равен 0), предполагая, что последовательность имеет хотя бы одну субвариабельную переменную.
Документация для индекса
https://freemarker.apache.org/docs/ref_builtins_loop_var.html
Возвращает основанный на 0 индекс, где итерация (которая идентифицируется по имени переменной цикла) в настоящее время находится.
Вы можете обрезать последний элемент списка (будьте осторожны, это приводит к ошибке для уже пустого списка):
<#list orderItem.options[0 ..< orderItem.options?size - 1] as x>
...
</#list>
Кроме того, вы можете использовать ?is_last
чтобы проверить, если вы находитесь на последнем элементе, а затем добавить вложенный #if
который использует это:
<#list orderItem.options as option>
<#if !option?is_last>
...
</#if>
</#list>