работа с шаблонами php и javascript

В настоящее время я использую тонкий фреймворк для обслуживания HTML-шаблонов в браузере. После загрузки представления приложение извлекает некоторую информацию из RESTful API и использует handlebars.js для заполнения различных аспектов DOM.

Я хотел бы использовать систему шаблонов php, такую ​​​​как mustache.php или twig, для обработки некоторых очень простых потребностей шаблона, когда обслуживается шаблон html. Однако, поскольку handlebars.js использует тот же синтаксис, что и mustache.php и twig, у меня возникают серьезные конфликты, когда приходит время заполнять DOM информацией, полученной из API.

Единственное решение, которое у меня есть на данный момент, - это выполнить str_replace() в шаблоне html вместо использования одного из приведенных выше решений для шаблонов php.

Есть ли способ использовать одно из решений для шаблонов php и handlebars.js без конфликтов?


person TheLastEmperawr    schedule 10.10.2012    source источник


Ответы (1)


Самый быстрый способ справиться с этим — изменить разделители усов в шаблоне на стороне сервера. Что-то вроде этого:

{{=<% %>=}}
<html>
<head>
  <title><% title %></title>
  <script type="text/x-handlebars-template" id="mytemplate">
    {{# stuff }}{{ otherstuff }}{{/ stuff }}
  </script>
</head>
<body>
  <h1><% title %></h1>
</body>
</html>

Таким образом, разделители типа <% используются Mustache.php, а разделители типа {{ игнорируются, гарантируя, что они будут доступны для использования Handlebars.js.

Вы также можете изменить разделители сразу вокруг ваших шаблонов Handlebars, если вы хотите продолжать использовать усы для своих обычных разделителей:

<html>
<head>
  <title>{{ title }}</title>
  {{=<% %>=}}
  <script type="text/template" id="mytemplate">
    {{# stuff }}{{ otherstuff }}{{/ stuff }}
  </script>
  <%={{ }}=%>
</head>
<body>
  <h1>{{ title }}</h1>
</body>
</html>

Если вы переместите свои шаблоны рулей в частичное:

{{=<% %>=}}
<script type="text/template" id="mytemplate">
  {{# stuff }}{{ otherstuff }}{{/ stuff }}
</script>

... изменение разделителя будет применяться только внутри этого фрагмента. Тогда вы можете сделать это:

<html>
<head>
  <title>{{ title }}</title>
  {{> handlebars_templates }}
</head>
<body>
  <h1>{{ title }}</h1>
</body>
</html>

Я бы рекомендовал пойти по этому пути, так как он наиболее ремонтопригоден.

person bobthecow    schedule 10.10.2012