Шаблон усов с этикеткой

Если у меня есть следующий массив

array (
    'people' => array(
        [0] => array('name'=>'name1'),
        [1] => array('name'=>'name2', 'last' => true)
    )
);

и я хочу вывести его с помощью шаблона Mustache, чтобы окончательный HTML-код выглядел так:

<div>
    Names: name1, name2
</div>

Хотя, если массив пуст, он ничего не должен выводить.

Это мой текущий шаблон

<div>
    {{#people}}
        Names: {{name}}{{^last}}, {{/last}}
    {{/people}}
</div>

который выводит

<div>
    Names: name1, Names: name2
</div>

Я понимаю, почему он не выводит то, что я хочу, но я не знаю, как это решить.


person Oskar Persson    schedule 27.05.2014    source источник


Ответы (1)


<div>
    {{#people.0}}
        Names:
        {{#people}}
            {{name}}{{^last}}, {{/last}}
        {{/people}}
    {{/people.0}}
</div>

Причина, по которой вы дважды записывали Names:, заключалась в том, что все внутри {{#people}} и {{\people}} обрабатывается как цикл.

person Jon Sturdevant    schedule 27.05.2014
comment
Да, потому что тогда, если людей нет, метка Names: все равно будет там. - person Oskar Persson; 27.05.2014
comment
Добавьте ключ hasNames в свой массив или используйте хакерский {{# people.0 }}, чтобы проверить, пуст ли он: stackoverflow.com/questions/19572096/ - person bobthecow; 28.05.2014
comment
Или вы можете использовать {{#people.length}} (обновил ответ) - person Jon Sturdevant; 29.05.2014
comment
Извините - это php .length, вероятно, не будет работать. Я отсылаю вас к комментарию, который сделал @bobthecow. - person Jon Sturdevant; 29.05.2014
comment
Нет, я не могу заставить .length работать, но #people.0 работает отлично, спасибо - person Oskar Persson; 25.06.2014