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?
(solo portando l'attenzione a '' myGobalVar' vs myGlobalVar') – Kos