Handlebars.js: Назначение переменных в шаблоне

Созданный на 29 мар. 2013  ·  11Комментарии  ·  Источник: handlebars-lang/handlebars.js

Можно ли присвоить переменную внутри шаблона и использовать ее как переменную извне?

Пример:
Я хочу вывести таблицу, но 1 столбец необязателен, зависит от того, существуют данные (fields[].field2) или нет.

В каждой строке проверить не проблема, но как проверить заголовок?

<table>
  <thead>
    <tr>
      <th>Head 1</th>
      <th>Head 2 (optional)</th>
      <th>Head 3</th>
    </tr>
  </thead>
{{#each fields}}
  <tr>
    <td>{{{field1}}}</td>
    {{#if field2}}<td>{{{filed2}}}</td>{{/if}}
    <td>{{{field3}}}</td>
  </tr>
{{/each}}
</table>

На данный момент я использую неустойчивую вспомогательную функцию «assign», которая создает помощников.

{{#each fields}}
  {{#if field2}}
    {{assign "helperVar" "<th>Head 2 (optional)</th>"}}
  {{/if}}
{{/each}}

Output with: {{{helperVar}}}

Но это не очень хорошее решение, и я не могу использовать его в #if.

Самый полезный комментарий

:+1:

@kpdecker У нас могут быть циклы, операторы if и ряд других логических конструкций в шаблонах. Но, видимо, назначение переменной — это _слишком_ много логики в шаблонах? Я действительно не понимаю причину этого решения, когда другие помощники по умолчанию содержат гораздо больше логики, чем просто возможность присваивать переменную.

Все 11 Комментарий

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

Я думаю, что рекомендуемым подходом здесь будет вычисление этих данных в вашей логике создания контекста и передача их в шаблон. Это обеспечивает гораздо больший контроль, поскольку в вашем распоряжении есть полный язык javascript, а не какое-либо его подмножество, реализованное в языке шаблона.

template({
  fields: fields,
  hasField2: _.any(fields, function(item) { return item.field2; })
});

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

Например, 2 моих шаблона используют один и тот же частичный файл. Я хотел бы иметь возможность передавать некоторые переменные в этот частичный уровень с уровня шаблона, чтобы разные вещи выводились для другого шаблона в рамках частичного.

+1

+1

:+1:

:+1:

@kpdecker У нас могут быть циклы, операторы if и ряд других логических конструкций в шаблонах. Но, видимо, назначение переменной — это _слишком_ много логики в шаблонах? Я действительно не понимаю причину этого решения, когда другие помощники по умолчанию содержат гораздо больше логики, чем просто возможность присваивать переменную.

+1

+1

+1

+1

Что-то в этом роде может быть реализовано с использованием параметров блока и задокументировано здесь:
http://handlebarsjs.com/block_helpers.html#block -параметры

Поскольку это делается в отдельном пространстве имен вне текущего контекста, это обеспечивает более согласованное поведение по сравнению с назначением контекста.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги