2013-02-12 2 views
6

Есть ли лучший способ загладить первый символ строки в Jade, чем это?Лучший способ ucfirst в шаблоне нефрита?

for list in project.lists 
    - list.name = list.name.charAt(0).toUpperCase() + list.name.slice(1); 
    li #{list.name} 

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

for list in project.lists 
    li #{ucfirst(list.name)} 

Спасибо заранее!

ответ

15

Содержимое #{} выполнено в стандартной комплектации JS, поэтому вы можете передавать вспомогательные функции для использования с такими вещами. Вы не указали, но если вы используете Джейд вместе с экспресс, вы можете сделать что-то вроде этого:

app.locals.ucfirst = function(value){ 
    return value.charAt(0).toUpperCase() + value.slice(1); 
}; 

Это подвергнет функцию под названием ucfirst в шаблоне Джейд. Вы также можете передать его как часть locals при каждом рендеринге, но если вы используете Express, он сделает это автоматически.

+1

Это было именно то, что я искал, спасибо:) –

+0

Рад, что я наткнулся на это, чувствую себя грязным, используя функцию PHP в javascript, но 'ucfirst' просто слишком удобен! –

0

Если вы хотите прибегнуть к CSS, вы можете создать класс, который заглавывает первую букву каждого слова в целевом элементе.

CSS

.caps { 
    text-transform: capitalize; 
} 

Джейд

div.caps 
    each foo in ['one', 'two', 'three'] 
     span #{foo} 

Результирующий HTML

<div class="caps"><span>one</span><span>two</span><span>three</span> 

Результирующий вид

One Two Three 
0

Если вы используете мопса с глотком, это может быть полезно:

mixin ucfirst(text) 
    - text = text.charAt(0).toUpperCase() + text.slice(1); 
    . 
     #{text} 

Просто назвать это, как и любой другой Mixin:

li 
    +ucfirst(list.name) 
Смежные вопросы