我使用 Google Closure Templates 的经验仅限于 Atlassian 插件开发中的 Java 后端,但是,模板使用一个保留变量来存储全局数据:$ij
. 以下内容来自文档的注入数据部分:
注入的数据是可用于每个模板的数据。您不需要@param
对注入数据使用声明,也不需要手动将其传递给调用的子模板。
给定模板:
{namespace ns autoescape="strict"}
/** Example. */
{template .example}
foo is {$ij.foo}
{/template}
在 JavaScript 中,您可以通过第三个参数传递注入的数据。
// The output is 'foo is injected foo'.
output = ns.example(
{}, // data
null, // optional output buffer
{'foo': 'injected foo'}) // injected data
在 Java 中,使用 Tofu 后端,您可以使用 Renderer 上的 setIjData 方法注入数据。
SoyMapData ijData = new SoyMapData();
ijData.put("foo", "injected foo");
SoyTofu tofu = ...;
String output = tofu.newRenderer("ns.example")
.setIjData(ijData)
.render();
注入的数据不限于像参数这样的函数。尽管调用标签上没有任何数据属性,但下面的模板的行为方式与上面的“.example”模板相同。
{namespace ns autoescape="strict"}
/** Example. */
{template .example}
{call .helper /}
{/template}
/** Helper. */
{template .helper private="true"}
foo is {$ij.foo}
{/template}