Есть ли способ обойти конфликт имен во вложенных структурах в моих шаблонах Mustache.js? - PullRequest
6 голосов
/ 23 сентября 2011

У меня действительно возникают проблемы с конфликтами имен в моих шаблонах Mustache (используя Mustache.js). Этот пример иллюстрирует эти две проблемы:

Я передаю эти данные:

{'recs': {'code': 'foo', 'id': 1
          'childRecs': [{'id': 2},
                        {'code': 'bar', 'id': 3}]
         }
}

В этот шаблон:

{{#recs}}
  Record ID: {{id}}
  {{#childRecs}}
    This child code is: [{{code}}] and its parent ID is: {{id}}
  {{/childRecs}}
{{/recs}}

Ожидаемый:

Record ID: 1
This child code is: [] and its parent ID is 1
This child code is: [bar] and its parent ID is 1

Фактический:

Record ID: 1
This child code is [foo] and its parent ID is 2
This child code is [bar] and its parent ID is 3
  1. Вложенный блок {{#childRecs}} не может получить доступ к родительскому полю {{#recs}}{id}}{{/recs}} - он перезаписывается {{#childRecs}}{{id}}{{/childRecs}}

  2. Если переменная в {{#childRecs}} отсутствует, и существует родительская переменная с тем же именем, нет способа помешать ей напечатать родительскую переменную.

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

1 Ответ

6 голосов
/ 24 сентября 2011

Я вижу два варианта:

  • Обогащение данных на стороне клиента перед отправкой на рендеринг.Например, вы можете перебрать все childRecs и добавить новое свойство parentId - и затем соответствующим образом обновить свой шаблон, или

  • Использовать http://www.handlebarsjs.com/ - он сохраняет синтаксис усовно добавляет несколько вкусностей, таких как доступ к родительскому контексту (через ../).Например:

    {{#recs}}
        Record ID: {{id}}
        {{#childRecs}}
            This child code is: [{{code}}] and its parent ID is: {{../id}}
        {{/childRecs}}
    {{/recs}}
    
...