Шаблоны закрытия: установка глобальной переменной из переданного параметра в файле сои

Есть ли способ установить глобальные переменные в файле.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}
Другие вопросы по тегам