我刚刚加入了一个团队,该团队在 java 中使用 google-closure 来从 soyfiles 构建网站输出。这对于 html 来说效果很好,但目前对于 javascript 来说却很丑陋。当前的方法是将 javascript 包围在 {literal} 中,这意味着我们没有得到任何好处。我们正在做的一个例子如下:
{namespace forms autoescape="contextual"}
{template myForm}
//.... stuff happens
{call js.myFormJs data="$someParam" /}
js:
{namespace forms autoescape="contextual"}
/**
* @param foo
*/
{template myForm}
<script type="text/javascript">
{literal}
//js stuff happens
var myVariable {/literal}{$foo}{literal};
//js stuff happens
{/literal}
</script>
{/template}
我们还在某些地方使用
{if}
块中的 soy 参数来确定是否生成了脚本的整个部分。如上所示,这些 js soy 文件几乎总是作为其他 siy 文件的一部分被调用,通常都是 html。
所以我的问题是,我们应该做什么?我查看了
|escapeJs
标志,但找不到在哪里应用它。去掉 {literal}
会导致所有 javascript 大括号出现渲染错误。有一个更好的方法吗?我应该在 js 中使用 soy 文件吗(因为我开始怀疑我们不应该这样做)?
所以这里有几种方法,最好的方法是在模板之外生成 JavaScript。 你也可以用 {lb} 和 {rb} 替换你的大括号,但这使得代码几乎不可读。
抱歉,这不是答案,但它不会让我发表评论,因为我是新来的。你找到解决办法了吗?我已经为这件事苦苦挣扎了好几天,非常想知道你是如何处理这个问题的。谢谢!