2013-07-08 19 views
6

Diciamo che ho un browser aperto e in JavaScript dichiaro una variabile globale.Come può un modello Jade utilizzare variabili globali lato client?

window.myGlobalVar = 'Hello!'; 

Compongo quindi un modello di giada per il rendering lato client che utilizza tale variabile.

.foo= myGobalVar 

Quale compilo in questo modo:

jade.compile('.foo= myGobalVar', { 
    client: true, 
    compileDebug: false 
}).toString() 

che produce questa funzione template:

function anonymous(locals) { 
    var buf = []; 
    var locals_ = (locals || {}), 
     myGobalVar = locals_.myGobalVar; 
    jade.indent = []; 
    buf.push("\n<div class=\"foo\">" 
      + (jade.escape(null == (jade.interp = myGobalVar) ? "" : jade.interp)) 
      + "</div>");; 
    return buf.join(""); 
} 

che quando correva, produrrebbe:

<div class="foo">undefined</div> 

Come si può vedere, il compilatore di giada rileva che ho usato una variabile e la impone come variabile locale tramite myGobalVar = locals_.myGobalVar;, che ombreggia la variabile globale che effettivamente desidero utilizzare.

Così ho provato a fare riferimento a window.myGlobalVar e jade quindi appena ombreggiato window.

Perché non passare solo in tutto il mondo che voglio usare? Bene in fase di runtime non sono sicuro di quali siano i globali necessari. Ho dozzine di costruttori globali e passandoli tutti in modo esplicito richiederà abbastanza del refactoring.

Quindi, come posso ottenere un modello di giada lato client compilato in un modo che consenta riferimenti a varaibles glicosigliati?


Aggiornamento:

ho sorta di avere successo con questo.

Ma accidenti, questo mi fa sentire sporco ... Sicuramente c'è un modo migliore?

+1

(solo portando l'attenzione a '' myGobalVar' vs myGlobalVar') – Kos

risposta

2

È possibile passare i nomi delle icone globali, che si desidera utilizzare nei modelli di giada, con l'oggetto opzioni per la funzione di compilazione. Vedi Documentazione API giada: http://jade-lang.com/api/

jade.compile(template, { globals: ['globalone','globaltwo']}) 

Vai a questa violino per vederlo in azione: http://jsfiddle.net/lchngr/J5WJb/5/

+0

vostro violino non ha il file di giada – danielrvt

+0

lì non è un file di giada! il codice jade è la stringa. per favore guarda di nuovo il violino e ripensa il tuo voto negativo. ma il collegamento alla lib di momentjs importato è stato interrotto. Ho aggiornato il collegamento del violinista – slu