可以說我打開了一個瀏覽器,並在JavaScript中聲明瞭一個全局變量。Jade模板如何使用客戶端全局變量?
window.myGlobalVar = 'Hello!';
然後,我編譯一個用於客戶端渲染的玉石模板,使用該變量。
.foo= myGobalVar
這我編譯如下所示:
jade.compile('.foo= myGobalVar', {
client: true,
compileDebug: false
}).toString()
其中產量這個模板功能:
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("");
}
跑的時候,會產生:
<div class="foo">undefined</div>
正如你所看到的,玉器編譯器注意到我使用了一個變量,並通過myGobalVar = locals_.myGobalVar;
強制它成爲局部變量,這影響了我實際想要使用的全局變量。
所以我嘗試引用window.myGlobalVar
和玉然後只是影子window
。
爲什麼不僅僅傳遞給我想要使用的每個全球?那麼在運行時我不知道什麼樣的全局變量是必要的。我有幾十個全局構造函數,並且明確地傳遞它們將需要相當的重構。
那麼如何獲得一個客戶端玉模板編譯的方式,允許引用glbal變量?
更新:
我也有點這種成功。
for (key in window) {
if (localsObject[key] == null)
localsObject[key] = window[key];
}
}
renderTemplate(localsObject);
但該死的讓我覺得髒......當然有更好的辦法嗎?
(只將注意力集中在'myGobalVar' VS'myGlobalVar') – Kos