С советом "mu is too short".И несколько сумасшедших идей я придумал с интересным подходом к сложным шаблонам.* Это почти работает!
Итак, допустим, у меня есть этот контент (или данные или представление), который я хочу поместить в шаблон:
var content = {
title: "Black Book",
girls: ["blonde", "brunette", "redhead"],
digits: ['123', '456', '789'],
calc: function () {
return 2 + 4;
}
};
И у меня есть такой шаблон:
<script type="text/template" id="template">
<h1>{{title}}</h1>
<h3>{{calc}}</h3>
<ul>
<li><a href="{{digits}}">{{hair}}</a></li>
</ul>
</script>
И конечный результат, который мне нужен, таков:
<h1>Black Book</h1>
<h3>6</h3>
<ul>
<li><a href="123">blonde</a></li>
<li><a href="456">brunette</a></li>
<li><a href="789">redhead</a></li>
</ul>
Проблема, с которой мы столкнемся, состоит в том, что у нас есть массивы (или списки), вложенные в наше исходное содержимое, и еслимы пытались создать Mustache.render (html, content), в результате мы получили только один элемент li или целый массив в одном атрибуте href = "".Так грустно ...
Так что он подход, пройти через шаблон несколько раз.В первый раз пропустите и замените элементы верхнего уровня и настройте шаблон для следующего прохода.Во второй раз настройте один из списков и настройте шаблон для третьего прохода и т. Д., Чтобы узнать, сколько у вас слоев контента.Вот новый начальный шаблон:
<script type="text/template" id="template">
<h1>{{title}}</h1>
<h3>{{calc}}</h3>
<ul>
{{#hair}}
{{#digits}}
<li><a href="{{digits}}">{{hair}}</a></li>
{{/digits}}
{{/hair}}
</ul>
</script>
На первом проходе заполните заполнение верхнего уровня и измените {{digits}} на {{.}}
$.each(content, function (index, value) {
template2 = template.replace(/{{title}}/ig, content.title)
.replace(/{{calc}}/ig, content.calc)
.replace(/{{digits}}/ig, '{{.}}');
});
Сейчасу вас есть это:
<h1>Black Book</h1>
<h3>6</h3>
<ul>
{{#hair}}
{{#digits}}
<li><a href="{{.}}">{{hair}}</a></li>
{{/digits}}
{{/hair}}
</ul>
На следующем проходе мы просто вызовем Mustache.render (template2, content.digits);и это должно дать нам:
<h1>Black Book</h1>
<h3>6</h3>
<ul>
{{#hair}}
<li><a href="123">{{hair}}</a></li>
<li><a href="456">{{hair}}</a></li>
<li><a href="789">{{hair}}</a></li>
{{/hair}}
</ul>
И вот где моя логика умирает, хаха.Любая помощь, продумавшая это, потрясет!Я думаю, что мог бы извлечь элементы блока {{hair}} и просто сделать $ .each, пропустить content.girls и сложить .replace три раза.Или я мог бы попытаться начать с самого низкого уровня контента и продолжить свой путь.Я не знаю.
Все это в основном заставляет меня задуматься о том, есть ли какой-то "не логичный" способ размещения такого типа вложений или нескольких проходов в усы, разве рули делают это?