2013-07-08 10 views
6

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ı?

+1

(sadece myGlobalVar' 'vs myGobalVar'' dikkat getiren) – Kos

cevap

2

Yeşim şablonlarında kullanmak istediğiniz globals adlarını derleme işlevinin seçenekler nesnesinden geçirebilirsiniz. yeşim api docs bakınız: http://jade-lang.com/api/

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

eylem görmek için bu keman bakınız: http://jsfiddle.net/lchngr/J5WJb/5/

+0

sizin keman orada yeşim dosyası – danielrvt

+0

yok yeşim dosyası değil! yeşim kodu dizedir. lütfen tekrar keman'a bir göz atın ve aşağı oyınızı yeniden düşünün. ama ithal momentlerin lib bağlantısı kesildi. Fiddler bağlantısını güncelledim – slu

İlgili konular