1

有没有办法将 .soy 文件中的全局变量设置为从 .html 传入的参数?这样所有模板都能够访问全局变量,以避免将相同参数重新传递给每个模板的冗余。

例如像这样工作的东西:

HTML:

document.write(wet4.gcweb.setGlobal({templatedomain:"example.ca"}));    

大豆:

/**
 * Test.
 * @param templatedomain 
 */
{template .setGlobal}
globalVariable = $templatedomain
{/template}

并且可以从所有其他模板访问 globalVariable

4

1 回答 1

2

我使用 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}
于 2015-09-08T23:26:46.913 回答