假设我打开了一个浏览器,并在JavaScript中声明了一个全局变量。
这将产生以下模板函数:
正如你所看到的,Jade编译器注意到我使用了一个变量,并通过
因此,我尝试引用
为什么不直接传入我想要使用的每个全局变量?好吧,在运行时,我不确定哪些全局变量是必需的。我有几十个全局构造函数,明确传递它们都需要进行相当大的重构。
那么,我该如何编译客户端Jade模板,以便允许引用全局变量?
更新:我确实在这方面取得了一定的成功。
但是这让我感到很不舒服...肯定有更好的方法吧?
window.myGlobalVar = 'Hello!';
我随后编译了一个Jade模板,用于客户端渲染并使用该变量。
.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>
正如你所看到的,Jade编译器注意到我使用了一个变量,并通过
myGobalVar = locals_.myGobalVar;
强制将其作为本地变量,从而掩盖了我实际想使用的全局变量。因此,我尝试引用
window.myGlobalVar
,然后jade就遮蔽了window
。为什么不直接传入我想要使用的每个全局变量?好吧,在运行时,我不确定哪些全局变量是必需的。我有几十个全局构造函数,明确传递它们都需要进行相当大的重构。
那么,我该如何编译客户端Jade模板,以便允许引用全局变量?
更新:我确实在这方面取得了一定的成功。
for (key in window) {
if (localsObject[key] == null)
localsObject[key] = window[key];
}
}
renderTemplate(localsObject);
但是这让我感到很不舒服...肯定有更好的方法吧?
myGobalVar
和myGlobalVar
的区别) - Kos