2013-07-26 7 views
32

Come scrivere un valore di attributo lungo su più righe in Jade/Pug?Più righe per valore di attributo lungo in Jade/Pug

I percorsi SVG tendono ad essere molto lunghi. Vogliamo scrivere un valore di attributo su più righe per facilitare la leggibilità. Ad esempio, lo tutorial di Mozilla scritto in HTML è facile da leggere.

un modo per cambiare questo:

h3 Arcs 
svg(width="320px", height="320px") 
    path(d="M10 315 L 110 215 A 30 50 0 0 1 162.55 162.45 L 172.55 152.45 A 30 50 -45 0 1 215.1 109.9 L 315 10", 
    stroke="black", fill="green", 
    stroke-width="2", fill-opacity="0.5") 

in qualcosa di simile a questo:

h3 Arcs 
svg(width="320px", height="320px") 
    path(d="M10 315 " + 
    "L 110 215 " + 
    "A 30 50 0 0 1 162.55 162.45 " + 
    "L 172.55 152.45 " + 
    "A 30 50 -45 0 1 215.1 109.9 " + 
    "L 315 10", 
    stroke="black", fill="green", 
    stroke-width="2", fill-opacity="0.5") 

senza far scattare un "token imprevisto" errore.

risposta

33

Ho lo stesso problema ma in un contesto di knockoutjs. Ho usato il backslash in questo modo. precedenza:

div(data-bind="template: {name: 'ingredient-template', data: $data}") 

Ora:

div(data-bind="template: {\ 
    name: 'ingredient-template',\ 
    data: $data}") 

Nota: Il backslash deve essere seguito immediatamente da un ritorno a capo. Non sono sicuro che questo sia il modo "ufficiale", l'ho fatto e sembra funzionare. Uno svantaggio di questo metodo è che le stringhe vengono quindi visualizzate con lo spazio bianco intatto. Quindi l'esempio precedente viene visualizzato come:

<div data-bind="template: {     name: 'ingredient-template',     data: $data}"> 

Ciò potrebbe renderlo inutilizzabile per il tuo esempio.

Modifica Grazie Jon. L'idea var dal tuo commento è probabilmente migliore anche se non ancora ideale. Qualcosa di simile:

-var arg = "M10 315 " 
-arg += "L 110 215 " 
-arg += "A 30 50 0 0 1 162.55 162.45 " 
-arg += "L 172.55 152.45 " 
-arg += "A 30 50 -45 0 1 215.1 109.9 " 
-arg += "L 315 10" 
h3 Arcs 
    svg(width="320px", height="320px") 
    path(d=arg, 
    stroke="black", fill="green", 
    stroke-width="2", fill-opacity="0.5") 

Non sono sicuro che i caratteri extra valgano la riduzione della lunghezza della linea.

+1

pensi che assegna l'attributo ad una variabile sarà meglio –

+0

Ad esempio, '- Dati var =? "template: {" // così via. ..' e poi assegnarlo in un secondo momento nell'attributo –

+0

'-var items = []'/'-items.push ({...})' è buono anche per gli array ... – Patrice

15

Ho cercato una risposta a questo e credo che si possano rompere gli attributi di giada su più righe saltando le virgole finali.

Es.

aside                    
    a.my-link(               
    href="https://foo.com"           
    data-widget-id="1234567abc")           
    | Tweets by @foobar 

ho trovato questo messaggio di commit su di esso: https://github.com/visionmedia/jade/issues/65

+0

Ciao @blischalk, stiamo cercando di rompere un singolo valore di attributo in più righe, ad esempio, 'd =" M10 315 L 110 215 A 30 50 0 0 1 162.55 162.45 L 172.55 152.45 A 30 50 -45 0 1 215.1 109.9 L 315 10 "in qualcosa di più leggibile. Il tuo esempio qui può essere facilmente b roken su poche righe a causa di brevi attributi. Che ne dici di quelli lunghi? –

+0

Grazie @blischalk - questo non risponde alla domanda dell'OP ma era esattamente ciò di cui avevo bisogno e mi sono presentato per primo su Google. –

7

Puoi farlo chiudendo la corda alla linea-break, l'aggiunta di un '+', e quindi l'apertura di una nuova stringa sulla riga di continuazione .

Ecco un esempio:

path(d="M10 315 L 110 215 A 30 50 0 0 1 162.55 162.45 L 172.55" + 
     " 152.45 A 30 50 -45 0 1 215.1 109.9 L 315 10", 
    foo="etc", 
    ... 
+2

Grazie per le risposte ragazzi. Sia questa che la risposta accettata funzionano alla grande. La risposta accettata ha meno caratteri da digitare, ma ciò non confonde l'evidenziazione della sintassi del plug-in jade del mio editor. Peccato che non possiamo usare il triplo "come coffeescript – Cosmin

8

Questa è una vecchia questione, ma qui è una risposta più recente.

Nel mio caso sto usando PUG nei modelli di vue in componenti a singolo file. Quindi il seguente funziona per me.

<template lang='pug'> 
    .day(:class=`{ 
    'disabled': isDisabled, 
    'selected': isSameDay, 
    'in-range': isInRange, 
    'today': isToday, 
    'weekend': isWeekend, 
    'outside-month': isOutsideMonth }`, 
    @click='selectDay' 
) {{label}} 
</template> 

, ad es.utilizzando stringa di interpolazione ` invece di ' o "

+1

Questa dovrebbe essere la nuova risposta accettata – Deminetix

+1

Sì, qualcuno che usa VueJS!: D –

+0

Grazie! Inoltre, come alternativa per le persone VueJS, puoi usare una proprietà calcolata: ': class = "classi"'. – prograhammer