2013-02-12 15 views
6

C'è un modo migliore per capitalizzare il primo carattere di una stringa in Jade rispetto a questo?Un modo migliore per ucfirst in un template Jade?

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

Facendo questo ogni volta che voglio di capitalizzare una variabile è brutto, c'è un modo a Jade che posso definire una funzione personalizzata che ho a disposizione in ogni template come:

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

Grazie in anticipo!

risposta

15

Il contenuto di #{} viene eseguito come JS standard, quindi è possibile passare le funzioni di supporto per l'uso con cose del genere. Non è stata specificata, ma supponendo che si sta utilizzando Giada insieme a Express, è possibile fare qualcosa di simile:

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

che esporrà una funzione chiamata ucfirst all'interno del modello di Giada. Puoi anche passarlo come parte di locals ogni volta che esegui il rendering, ma se stai usando Express lo farà automaticamente.

+1

che era esattamente quello che stavo cercando, grazie:) –

+0

Contento di essermi imbattuto in questo, mi sento un po 'sporco usando una funzione PHP in javascript, ma 'ucfirst' è troppo comodo! –

0

Se si è disposti a ricorrere al CSS, è possibile creare una classe che capitalizzi la prima lettera di ogni parola all'interno dell'elemento di destinazione.

CSS

.caps { 
    text-transform: capitalize; 
} 

Jade

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

HTML risultante

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

risultante vista

012.
One Two Three 
0

Se si utilizza Carlino con gulp, questo può essere utile:

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

Chiamate questo come qualsiasi altro mixin:

li 
    +ucfirst(list.name) 
Problemi correlati