Handlebars. js: Вложенные шаблоны удаляют "безопасный" HTML

Я пытаюсь отобразить сильно изменяющийся набор данных, используя серию вложенных шаблонов Handlebars, и результат, который получается, полностью лишен HTML-тегов, несмотря на использование 'triple-stash' и возвращение SafeString.

У меня есть данные, которые выглядят примерно так:

{
  "type": "person",
  "details": [
    {"name": "firstname", "value": "joe"},
    {"name": "lastname", "value": "smith"},
    {
      "name": "company",
      "value": "acme",
      "details": [
        {"name": "address", "value": "123 Main St; Somewhere, CA"},
        {"name": "employees", "value": "10+"}
      ]
    }
  ]
}

и у меня есть пара таких шаблонов:

<template id="personDetails">
  <ul>
    {{{renderPersonDetails details}}}
  </ul> 
</template>

<template id="companyDetails">
  <ol>
    {{{renderCompanyDetails details}}}
  </ol> 
</template>

Я передаю весь объект в первый шаблон. В шаблоне я передаю коллекцию 'details' зарегистрированному помощнику: "renderPersonDetails". Первые два элемента просты и возвращаются как два элемента LI. Они возвращаются нормально.

Когда мы переходим к третьему элементу, имеющему свойство "details", я передаю этот объект шаблону companyDetails, который, в свою очередь, передает коллекцию "details" помощнику renderCompanyDetails.

Результаты работы помощника renderCompanyDetails полностью лишены HTML, несмотря на то, что:
1. мы используем тройное хранилище
2. мы возвращаем содержимое в объекте Handlebars.SafeString
3. Если я выведу html в консоль перед возвратом, я увижу HTML, как и ожидалось

Очевидно, что этот пример может быть значительно упрощен. Однако наш случай использования требует такого типа обработки из-за характера данных и требований к рендерингу.

Кстати, помощник renderCompanyDetails конструирует HTML в помощнике. Если я попытаюсь передать данные из помощника в третий шаблон и вернуть ТО, HTML будет полностью удален еще до рендеринга...

7
задан Mike Aski 9 August 2012 в 08:32
поделиться