我刚刚加入了一个团队,该团队在 java 中使用 google-closure 来构建它的来自 soyfiles 的站点输出。这适用于 html,但目前它对于 javascript 来说非常难看。当前的方法是在 {literal} 中包围 javascript,这意味着我们没有得到任何好处。我们正在做的一个例子如下:
{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}
块中的大豆参数来确定是否生成了脚本的整个部分。如上所示,这些 js soy 文件几乎总是作为其他 siy 文件的一部分被调用,通常都是 html。
所以我的问题是,我们应该怎么做?我看了看|escapeJs
国旗,但找不到在哪里应用它。摆脱{literal}
将导致所有 javascript 大括号的呈现错误。有一个更好的方法吗?我应该为 js 使用 soy 文件吗(因为我开始怀疑我们不应该)?