Шаблоны закрытия: установка глобальной переменной из переданного параметра в файле сои
Есть ли способ установить глобальные переменные в файле.soy на параметры, переданные из.html? Так что все шаблоны смогут получить доступ к глобальным переменным, чтобы избежать избыточности пересылки одних и тех же параметров в каждый шаблон.
Например что-то, что будет работать так:
HTML:
document.write(wet4.gcweb.setGlobal({templatedomain:"example.ca"}));
соя:
/**
* Test.
* @param templatedomain
*/
{template .setGlobal}
globalVariable = $templatedomain
{/template}
и globalVariable могут быть доступны из всех других шаблонов
1 ответ
Мой опыт работы с шаблонами Google Closure ограничен бэкэндом Java в разработке плагинов Atlassian, однако шаблоны используют зарезервированную переменную для глобальных данных: $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, вы можете вводить данные, используя метод setIjData в Renderer.
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}