2013-08-20 2 views
5

Я хочу сделать что-то вроде этого:Handlebar - динамический элемент атрибутов

{{#each user}} 
    <span class="{{user.female ? 'female-span' : 'male-span'}}">{{name}}</span> 
{{/each}} 

Это легко выполнимо в чем-то вроде angularjs, но я не могу сделать это руль. Какая идиома/шаблон следует использовать в дескрипторе, когда я хочу динамически изменять атрибуты элемента? Есть ли плагины руля, которые это делают?

ответ

8

Ручки только предоставили вам {{#if}} помощник (который можно использовать здесь, это просто многословный). Будучи менее логичным, он не оценивает код, передаваемый внутри скобок (это делает шаблоны подделок).

Это хорошая вещь, так как убедитесь, что ваш шаблон не будет иметь никаких побочных эффектов.

Здесь вы, вероятно, хотите, чтобы удалить эту логику из шаблона и передать имя класса в качестве аргумента шаблона:

template({ genderClass: user.female ? 'female-span' : 'male-span' }); 

Затем в шаблоне:

<span class="{{genderClass}}">{{name}}</span> 

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

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