2013-07-10 3 views
2

Я понял, что Hogan не поддерживает много логики, но есть некоторые способы управлять этой системой шаблонов, чтобы делать то, что вам нужно.Hogan.js: If-statements

В принципе, это то, что мне нужно (в псевдо-коде - при условии, что people.length> = 1):

{{#if people.length == 1}} 
    <p>Your contact person is {{name}}.</p> 
{{else}} 
    <p>Your contact people are:</p> 
    <ul> 
    {{#people}} 
     <li>{{name}}</li> 
    {{/people}} 
    </ul> 
{{/if}} 

ли это вообще возможно в шаблонизатор Hogan, или мне нужно отправить другую переменную, указывающую, есть ли ровно 1 член в моем массиве людей?

ответ

2

К сожалению, нет. Невозможно сделать это с помощью Hogan без установки другой переменной. Это один из главных недостатков (по моему мнению) Хогана. Я не согласен с тем, что «Это должно быть без логики» является оправданием этого недостатка. Оба if (true) и if (a == b) являются логическими, но Hogan позволяет вам делать одно, а не другое. Я согласен с тем, что у вас не должно быть логики в шаблонах (потому что там не может быть проведено тестирование), но Hogan/усы слишком далеко продвигаются к этой цели. Я рекомендую swig, который дает вам все, что вам предлагает Hogan, плюс сравнения if, плюс управление контуром (например, if (loop.first)), плюс более удобный, более легкий для чтения синтаксис фильтра при очень небольшом снижении производительности (менее полутора с половиной более 100 000 шаблонов согласно this, что, по общему признанию, относится к нескольким годам назад).

EDIT: Swig больше не поддерживается; однако Nunjucks очень похож на swig, как по объему, так и по стилю.

Смежные вопросы