2

我刚刚加入了一个团队,该团队在 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 文件吗(因为我开始怀疑我们不应该)?

4

1 回答 1

3

所以这里有一些方法,最好的方法是在模板之外生成你的 javascript。你也可以用 {lb} 和 {rb} 替换你的花括号,但我敢肯定这会使代码几乎不可读。

于 2013-06-28T09:35:29.973 回答