Попытка перебрать список параметров для элемента, но не распечатать последний вариант

<#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 &lt; 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>
Другие вопросы по тегам