Я люблю вложенные шаблоны. Я получаю надежные результаты. Теперь я программирую библиотеку как шаблонов, так и вспомогательных функций (обычно для элементов формы), которые составляют html для меня. HTML является побочным продуктом, и файлы, которые мы называем .html, на самом деле являются DSL для javascript.
Существует много S.O. вопросы, поднятые о вставках в отсортированные списки, дающие людям проблемы. У меня не было времени смотреть.
Мое правило: Метеор (хорошо) разработан с самого начала, чтобы сделать это легко и надежно.
До сих пор сложнее было решить, когда я добавил аккордеон из фонда, и обновление документа привело к его первоначальному состоянию (будучи закрытым или одним открытым). Мне пришлось ввести код, в котором сохранен текущий раздел, и код для повторного утверждения этого в обработанном обратном вызове для используемого шаблона.
Почему бы не написать прототип гнездования с одним полем или двумя местами и найти, что вас беспокоит?
Вот пример цепи. Вы видите все вложенные шаблоны. Сам этот шаблон работает в нескольких экземплярах.
Первый шаблон: называемый «макет», предложенный железным маршрутизатором. Имеет базовую страницу и меню. Основной корпус - это выход, установленный маршрутизатором. На странице образца, маршрут требует шаблон 'доступность'
<template name='availability'>
{{#each myAgents}}
<form class="custom" id="Agent_{{_id}}" action="">
<div id='availability' class="section-container accordion" data-section="accordion">
<section id="services">
<p class="title" data-section-title><a href="#">
Your Info
</a></p>
<div class="content" data-section-content>
{{>services}}
</div>
</section>
<section id="skills">
<p class="title" data-section-title><a href="#">
Skills
</a></p>
<div class="content" data-section-content>
{{>skills}}
</div>
</section>
<section id="sureties">
<p class="title" data-section-title><a href="#">
Sureties
</a></p>
<div class="content" data-section-content>
{{>sureties}}
</div>
</section>
<section id="time">
<p class="title" data-section-title><a href="#">
Time Available
</a></p>
<div class="content" data-section-content>
{{>time}}
</div>
</section>
<section id="schedule1">
<p class="title" data-section-title><a href="#">
Schedule 1
</a></p>
<div class="content" data-section-content>
{{>schedule}}
</div>
</section>
<section id="schedule2">
<p class="title" data-section-title><a href="#">
Schedule 2
</a></p>
<div class="content" data-section-content>
{{>schedule}}
</div>
</section>
<section id="distance">
<p class="title" data-section-title><a href="#">
Distance
</a></p>
<div class="content" data-section-content>
{{>distance}}
</div>
</section>
</div>
</form>
{{/each}}
</template>
образца дополнительно гнездо:
<template name='services'>
{{label_text fname='name' title='Agent Name' placeholder='Formal Name' collection='agent' passthrough='autofocus=autofocus ' }}
{{label_text fname='agentInCharge' title='Agent In Charge' placeholder='Owner' collection='agent' }}
{{label_text fname='phone' title='Phone Number(s)' placeholder='Include Area Code'collection='agent' }}
{{>gps }}
<h4>Not shared:</h4>
{{label_text fname='email' title='Email:' placeholder='you remain anonymous' collection='agent' }}
</template>
и LABEL_TEXT является помощником, извлеченным из https://github.com/mcrider/azimuth проекта:
generateField = (options) ->
options.hash.uniqueId = options.hash.fieldName + "_" + Math.random().toString(36).substring(7) if options.hash.template is "wysiwyg"
options.hash.id = options.hash.id or @_id
options.hash.value = options.hash.value or this[options.hash.fname]
# allow for simple params as default
options.hash.title = options.hash.title or options.hash.fname
options.hash.template = options.hash.template or "label_text"
options.hash.placeholder = options.hash.placeholder or options.hash.title
# compatible with old
options.hash.fieldName = options.hash.fieldname or options.hash.fname
options.hash.label = options.hash.label or options.hash.title
# FIXME: Return error if type not valid template
new Handlebars.SafeString(Template[options.hash.template](options.hash))
Handlebars.registerHelper "label_text", (options) ->
options.hash.collection = options.hash.collection or 'generic'
generateField.call this, options
Возможный дубликат [Множественный доход в приложении Meteor.js] (http://stackoverflow.com/questions/25526502/multiple-yield-in-meteor-js-application) – kontur