繁体   English   中英

Jade模板如何使用客户端全局变量?

[英]How can a Jade template use client-side global variables?

假设我打开了一个浏览器,并在JavaScript中声明了一个全局变量。

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>

如你所见,jade编译器注意到我使用了一个变量,并通过myGobalVar = locals_.myGobalVar;强制它成为局部变量myGobalVar = locals_.myGobalVar; ,它影响我实际想要使用的全局变量。

所以我尝试引用window.myGlobalVar和jade然后只是阴影window

为什么不直接传递我想要使用的每个全局? 那么在运行时我不确定需要什么全局变量。 我有几十个全局构造函数并明确地传递它们将需要相当重构。

那么如何以允许引用glbal varaibles的方式编译客户端jade模板呢?


更新:

我有点成功。

for (key in window) {
  if (localsObject[key] == null)
    localsObject[key] = window[key];
  }
}

renderTemplate(localsObject);

但该死的,这让我感觉很脏......当然有更好的方法吗?

您可以传递要在jade模板中使用的全局变量的名称,并将options对象传递给compile函数。 请参阅jade api docs: http//jade-lang.com/api/

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

看到这个小提琴,看看它在行动: http//jsfiddle.net/lchngr/J5WJb/5/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM