0

JavaScript からテンプレートを呼び出した場合:

namespace.template(record);

record次のインスタンスです。

/** @typedef {{var: string}} */

Google Closure Compiler を高度なモードで使用すると、 が書き換えられます。テンプレートでvar受け取るにはどうすればよいですか? これを行う唯一の方法は、書き換えを防ぐ代わりにvar使用することですか?'var'var

私は、理想的には@param、JavaScript コードの場合と同じように、テンプレートの に型を提供できればいいと考えています。これにより、使用する書き換えられた名前をコンパイラに知らせる必要があります...


これは のどの値に対しても起こらないようですvar。SoyToJsSrcCompiler は(この特別な名前のみで、これまでに使用した他の名前ではなく) をdefault使用してコードを生成し、Closure Compiler が名前を変更できないようにするため、キーの名前が の場合は発生しますが、JavaScript コードでプロパティの名前が変更されます。 'default'default引用符なしで使用しているためです。

4

1 に答える 1

1

テンプレートが次のようになっている場合:

/**
 * Foo
 * @param rec
 */
{template .Foo}
    <div>{$rec.var}</div>
{/template}

次に、SoyToJsSrcCompiler は次のようなコードを生成します。

/**
 * @param {Object.<string, *>=} opt_data
 * @param {(null|undefined)=} opt_ignored
 * @return {string}
 * @notypecheck
 */
namespace.Foo = function(opt_data, opt_ignored) {
  return '<div>' + soy.$$escapeHtml(opt_data.rec.var) + '</div>';
};

この生成されたテンプレート関数は、ソース ファイルと共にコンパイルに含まれることを意図しています。出力プロパティへのアクセスは の形式であるためrec.var、コンパイラは名前を正しく変更する必要があります。

于 2013-04-16T13:36:45.447 に答える