如果我用JavaScript调用模板:
namespace.template(record);
其中record
是以下的实例:
/** @typedef {{var: string}} */
我在高级模式下使用Google Closure Compiler,它会重写var
,那么我如何才能在模板中收到var
?是否使用'var'
代替var
来阻止重写执行此操作的唯一方法?
我在想,理想情况下,如果我可以为模板的@param
提供类型,就像我可以为JavaScript代码提供类型那样会很好,这应该让编译器知道要使用的重写名称...
var
的任何值都不会发生这种情况。如果密钥名为default
,它确实会发生,因为SoyToJsSrcCompiler使用'default'
生成代码(仅限此特殊名称,而不是我目前使用的任何其他名称),从而阻止Closure Compiler重命名,但该属性在JavaScript代码中重命名,因为我使用default
没有引号。
答案 0 :(得分: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
,因此编译器应正确重命名。