Açık bir tarayıcı açtığımı ve JavaScript'te global bir değişken bildirdiğimi söyleyelim.Bir Jade şablonu istemci tarafı global değişkenlerini nasıl kullanır?
window.myGlobalVar = 'Hello!';
Daha sonra bu değişken kullanan istemci tarafı oluşturma için bir yeşim şablonu derlerim. Bu şablon işlevi verir
jade.compile('.foo= myGobalVar', {
client: true,
compileDebug: false
}).toString()
: Öyle gibi derlemek
.foo= myGobalVar
ran
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("");
}
, üretecektir:
<div class="foo">undefined</div>
Gördüğünüz gibi, yeşim derleyicisi, bir değişken kullandığımı fark eder ve onu kullanmak istediğim genel değişkeni gölgeleyen myGobalVar = locals_.myGobalVar;
aracılığıyla yerel bir değişken olmaya zorlar. Bu nedenle window.myGlobalVar
referansını denedim ve yeşimden sonra window
gölgelendim.
Neden kullanmak istediğim tüm globalleri geçmiyorsunuz? Çalışma zamanında, hangi globals'ın gerekli olduğundan emin değilim. Düzinelerce küresel kurucum var ve hepsini açıkça gönderiyorum.
Nasıl bir istemci tarafı yeşim şablonunu glbal varaibles referanslarına izin verecek şekilde derlenir?
Güncelleme:
Bir çeşit bu ile başarılı etmedi.
for (key in window) {
if (localsObject[key] == null)
localsObject[key] = window[key];
}
}
renderTemplate(localsObject);
Ama tanrım, bu beni kirli hissettiriyor mu ... Elbette daha iyi bir yolu var mı?
(sadece myGlobalVar' 'vs myGobalVar'' dikkat getiren) – Kos