0

如果我从 JavaScript 调用模板:

namespace.template(record);

哪里record是一个实例:

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

我在高级模式下使用 Google Closure Compiler,它会重写var,那么我如何var在模板中接收?是使用'var'而不是var防止重写的唯一方法吗?

我在想,理想情况下,如果我可以为模板的@params 提供类型会很好,就像我可以为 JavaScript 代码一样,这应该让编译器知道要使用什么重写的名称......


看起来这不会发生在var. 如果键被命名,它确实会发生default,因为 SoyToJsSrcCompiler 生成代码使用'default'(仅用于这个特殊名称,而不是我迄今为止使用的任何其他名称),从而防止 Closure Compiler 重命名它,但该属性在 JavaScript 代码中被重命名,因为我使用的是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 回答