有没有办法将.soy文件中的全局变量设置为从.html传入的参数?这样所有模板都能够访问全局变量,以避免为每个模板修复相同参数的冗余。
例如可以这样工作的东西:
HTML:
document.write(wet4.gcweb.setGlobal({templatedomain:"example.ca"}));
大豆
/**
* Test.
* @param templatedomain
*/
{template .setGlobal}
globalVariable = $templatedomain
{/template}
可以从所有其他模板访问和globalVariable
答案 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}