Да, это возможно в Knockout.
Вы можете указать имя шаблона внутри корневого элемента:
<ul data-bind="template: {name: listItemTmpl, foreach: items()}"></ul>
, а затем внутри этого шаблона вы также можете ссылаться на другие шаблоны через data-bind
атрибут:
<script id="listItemTmpl" type="text/x-jquery-tmpl">
<li>
<h3 data-bind="text: name"></h3>
<div data-bind="template: itemDetailsTmpl"></div>
</li>
</script>
Knockout будет применять привязку корневого шаблона и, когда он встречает атрибуты data-bind
внутри этого шаблона, он применяет их рекурсивно.
В моем примере он будет применяться listItemTmpl
для каждого из items()
, а затем для каждого из них он будет использовать itemDetailsTmpl
для отображения подробностей.
С точки зрения производительности это очень быстро и незаметно для пользователя.
Я использую нокауттаким образом шаблоны в моем текущем проекте и рекурсивные шаблоны позволяют мне сохранять части моей разметки в небольших разделах.
Это то, что вы искали?