我正在使用与pug(以前的玉)相当的模板系统。模板可以包含javascript行。我使用with
块解决了它:
- var foo = "bar" // javascript
p(class=foo)!= bar
编译为:
function generatedFromString(context) {
var result = '';
with (context) {
var foo = "bar" // javascript
result += '<p class="';
result += escapeHtml(foo);
result += '">';
result += bar;
result += '</p>';
return result;
}
}
这很有效。但是,我知道with
已弃用,在严格模式下甚至是禁止。
所以,我的下一个想法是将context
的所有值复制到global
。但我怀疑这更糟糕,因为它会污染全局命名空间并减慢脚本速度。
除此之外,当模板中使用未声明的变量时,我不想获得 ReferenceError 。因此,似乎唯一的解决方案是将输出更改为
context.foo = "bar" // javascript
但是我必须解析javascript ,这需要付出更多的努力。
有谁知道是否有更好的解决方案?或者是否有必要解析javascript?