Вложение одного шаблона в другой с помощью StringTemplate 4 - PullRequest
2 голосов
/ 19 декабря 2011

У меня проблемы с пониманием того, как вложить другой шаблон в другой.Например, у меня есть 3 шаблона: application.stg , wrapper.stg и core.stg .

core.stg:

page(data1, data2) ::= <<
  <h1>$data1$</h1>
  <h1>$data2$</h1>
>>

wrapper.stg:

page(data3, data4) ::= <<
  <h1>$data3$</h1>

  <!----- CORE.STG GOES HERE ------->

  <h1>$data4$</h1>
>>

application.stg:

   page(data7, data8) ::= <<
      <h1>$data7$</h1>

      <!----- WRAPPER.STG GOES HERE ------->

      <h1>$data8$</h1>
    >>

Документация, кажется, намекает на то, что это возможно (раздел условных подшаблонов), но извинитеЯ не мог понять синтаксис вообще.Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 30 января 2014

Вы можете создать целый файл с каждым шаблоном и убедиться, что для него установлено расширение .stg. Затем создайте объект TemplateGroupFile, задайте свойства data7 и data8 и попросите его запустить в шаблоне приложения.

core(data1, data2) ::= <<
  <h1>$data1$</h1>
  <h1>$data2$</h1>
>>

wrapper(data3, data4) ::= <<
  <h1>$data3$</h1>
  core(data3,data4)
  <h1>$data4$</h1>
>>

application(data7, data8) ::= <<
  <h1>$data7$</h1>
  wrapper(data7,data8)
  <h1>$data8$</h1>
>>

Это код C #

TemplateGroupFile grp = new TemplateGroupFile(Template);
Template page_tpl = grp.GetInstanceOf(GroupName);
GroupName = "application";
page_tpl.Add("data7", yourData);
page_tpl.Add("data8", moreOfYourData);
File.WriteAllText(Path.Combine(dir, Path.GetFileName(outputFile)), page_tpl.Render());
...