2

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}

また、一部のブロックで soy パラメータを使用して{if}、スクリプトの一部全体が生成されるかどうかを判断します。上に示したように、これらの js soy ファイルはほとんどの場合、他の siy ファイルの一部として呼び出され、通常はすべて html です。

私の質問は、私たちは何をすべきかということです。フラグを見ました|escapeJsが、適用する場所が見つかりません。{literal}すべての JavaScript ブレースを取り除くと、レンダリング エラーが発生します。これを行うより良い方法はありますか?js に soy ファイルを使用する必要がありますか (使用すべきではないと考え始めているため)。

4

1 に答える 1

3

ここにはいくつかのアプローチがあります。最良のアプローチは、テンプレートの外側で JavaScript を生成することです。中括弧を {lb} と {rb} に置き換えることもできますが、それではコードがほとんど読めなくなります。

于 2013-06-28T09:35:29.973 に答える