关闭模板:从大豆文件中传递的参数设置全局变量

时间:2015-05-14 15:46:40

标签: html google-closure-templates soy-templates

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

例如可以这样工作的东西:

HTML:

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

大豆

/**
 * Test.
 * @param templatedomain 
 */
{template .setGlobal}
globalVariable = $templatedomain
{/template}
可以从所有其他模板访问

和globalVariable

1 个答案:

答案 0 :(得分:2)

我使用Google Closure模板的经验仅限于Atlassian插件开发中的Java后端,但模板使用保留变量来表示全局数据:$ij。以下内容摘自文档的Injected Data部分:

  

注入数据是每个模板都可用的数据。你没有   需要对注入的数据使用@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后端,您可以使用   渲染器上的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}