Обновление: после другого дня копания в этом вопросе я обнаружил, что текущий шаблон jQuery lib предоставляет нет способа сделать это. в этой статьеописывает хороший подход.
Я все равно хотел бы услышать о любых дополнительные мысли об этом. статья, связанная выше, требует, чтобы Возвращенная строка шаблонов вставлен в DOM. Кажется, как будто оставляя DOM из этого, было бы идеал и меньше накладных расходов на браузер. Представьте себе большую страницу, с несколько составных шаблонов, которые могут не привыкать. Хотя, может быть, потому, что шаблоны завернуты в scriptтег, для каждого шаблона есть только один элемент DOM? Давай, давай услышать некоторые мысли...
Используя jQuery template libs, какой лучший способ объединить несколько связанных, относительно маленьких шаблонов? Вам нужен один тег <script>
для каждого отдельного шаблона? Как насчет динамического вытягивания этих шаблонов через AJAX? Могу ли я объединить эти шаблоны?
Рассмотрим следующее:
<script id="movieTemplate" type="text/x-jquery-tmpl">
{{tmpl "#titleTemplate"}}
<tr class="detail"><td>Director: ${Director}</td></tr>
</script>
<script id="titleTemplate" type="text/x-jquery-tmpl">
<tr class="title"><td>${Name}</td></tr>
</script>
Теперь, поскольку эти два шаблона очень тесно связаны (и один зависит от другого), имеет смысл объединить их в один вызов AJAX и получить их оба сразу. У меня есть несколько идей, но я хотел бы знать, есть ли общий/лучший способ сделать это? В настоящее время я втягиваю кусок HTML, а затем делаю .find(), чтобы получить конкретный фрагмент HTML для шаблона... например:
var templatePackage = fancyAjaxCalltoGetTemplates();
"templatePackage" может выглядеть следующим образом:
<div id="templatePkg">
<div id="movieTemplate">
{{tmpl "#titleTemplate"}}
<tr class="detail"><td>Director: ${Director}</td></tr>
</div>
<div id="titleTemplate">
<tr class="title"><td>${Name}</td></tr>
</div>
</div>
Тогда я мог бы сделать:
var titleTemplate = jQuery.template('titleTemplate', $(templatePackage).find('#titleTemplate') );
и
var movieTemplate = jQuery.template('movieTemplate', $(templatePackage).find('#movieTemplate') );
... дайте мне знать, что вы думаете... что бы вы сделали?