У меня есть шаблон, который я хочу использовать как частично, так и отдельно от javascript.Handlebars.js: используйте частичный, как обычный, полный шаблон
ответ
Если ваши шаблоны прекомпилированы, вы можете получить доступ к партиалам через Handlebars.partials['partial-name']()
, а также вызывать их из шаблона через {{> partial}}
помощника.
Это хорошо, потому что вы можете затем написать функцию утилиты для рендеринга шаблона, будь то полный шаблон или частичный.
например:
function elementFromTemplate(template, context) {
context = context || {};
var temp = document.createElement('div');
temp.innerHTML = templates[template] ? templates[template](context) : Handlebars.partials[template](context);
return temp.firstChild;
}
myDiv.appendChild(elementFromTemplate('myPartial', context));
myDiv.appendChild(elementFromTemplate('a-whole-template'));
Надеется, что это поможет кому-то, кто хочет использовать рули, как я.
Чтобы использовать частичный шаблон, просто введите {{> partialName}}
.
<script id="base-template" type="text/x-handlebars-template">
<div>
{{> person}} <!-- This is the partial template name -->
</div>
</script>
<script id="partial-template" type="text/x-handlebars-template">
<div class="person">
<h2>{{first_name}} {{last_name}}</h2>
<div class="phone">{{phone}}</div>
</div>
</script>
<script type="text/javascript">
$(document).ready(function() {
var template = Handlebars.compile($("#base-template").html());
//Aliasing the template to "person"
Handlebars.registerPartial("person", $("#partial-template").html());
template(yourData);
}
</script>
И как бы я отрисовал это частично из javascript (а не в шаблоне)? –
Вы имеете в виду это -: el.html (this.template (yourData)); –
Просто fyi, почему это не принятый ответ. Это вся информация, которая легко встречается в документации Handlebar и является основным использованием частичного. Я был полностью осведомлен о том, как использовать частичное внутри шаблона, прежде чем задавать вопрос, но потребовалось некоторое перекопание в исходный код Handlebar, чтобы узнать, как частично вынести частичное из javascript. –
Это проще сделать это наоборот - чтобы собрать все ваши шаблоны как обычные шаблоны, а затем сделать их доступными в качестве обертонов:
Handlebars.partials = Handlebars.templates
Это позволяет использовать шаблоны, как обычно, и как обертоны, а также:
{{> normalTemplate}}
Интересная идея. Есть ли недостаток или причина, по которой вам когда-либо понадобились частичные, которые не являются нормальными шаблонами? (Если нет, кажется, Handlebars может просто использовать синтаксис '{{> xxx}}', чтобы означать включение другого шаблона, и вообще не иметь концепции частичных?) –
Точно моя мысль. Я не понимаю понятия частичных понятий и еще не нашел достаточной причины для их использования. Думаю, это конвенция? Или какая-то оптимизация ... Что не имеет значения, если вы (и вы должны) прекомпилировать шаблоны. Я мог бы что-то упустить, но, по крайней мере, с предварительной компиляцией, этот метод кажется безопасным. –
Действительно интересный «взлом», весьма полезный с заранее скомпилированными шаблонами! – Vadorequest
оказывать частично из Javascript вы можете использовать
Handlebars.partials["myPartial"]()
Handlebars.partials ['partial-name'] не возвращает функцию, но возвращает шаблон (строку). Спасибо, что указали на это. – mynameistechno
@mynameistechno Возможно, потому что вы не прекомпилируете свои шаблоны (как и должно быть!) –