Проще всего объяснить вопрос на примере.
У меня есть шаблон руля, определенный на странице HTML:
<script id="myTemplate" type="text/html">
<h1>{{fieldname}}</h1>
</script>
Я отрисовываю шаблон с рулем:
var source = $("#myTemplate").html();
var template = Handlebars.compile(source);
var txt = template(jsonObj);
и txt в конечном итоге содержит визуализированный HTML-текст. Нет проблем.
НО ...
скажем, я получил XML-файл через ajax, и я хотел бы использовать jquery для доступа к нему для визуализации элементов.
Чтобы получить, скажем, значение дочернего элемента «name» из родительского элемента, я мог бы использовать jquery следующим образом:
$(xml).find('name').text()
Итак, я подумал, что мой шаблон может выглядеть примерно так: (ПРИМЕЧАНИЕ, ЭТО НЕ РАБОТАЕТ!)
<script id="myTemplate" type="text/html">
<h1>{{$(this).find('name').text()}}</h1>
</script>
РЕДАКТИРОВАТЬ: Очевидно, это не работает.
я тоже пробовал
{{this.find('name').text()}}
и даже
{{.find('name').text()}}
Но ничего из этого не работает, и до сих пор я не смог найти ни одну из систем шаблонов JS, где вы могли бы сделать что-то подобное. Похоже, что руль и DUST, скорее всего, смогут это сделать, но мне пока не повезло.
Я видел некоторые признаки того, что я могу преобразовать XML в JSON и просто передать его в качестве контекста, и это действительно может быть единственным способом.
Это проще, чем я это представляю? Невозможно?
EDIT:
После более глубокого изучения, похоже, что для Javascript просто нет шаблонного решения, которое бы работало взаимозаменяемо с объектами JSON или XML Dom для контекста данных. Все они, кажется, принимают JSON.
Ооооо ... Я использовал один из многих доступных плагинов jquery для преобразования xml2json и передачи объекта TH в HandleBars, и все работает без проблем.
Единственный трюк, с которым я столкнулся, - это если вы выполняете запрос JQUERY к данным XML, чтобы найти конкретный элемент, вы получаете массив массивов XML dom, даже если результат только 1.
Итак, я должен был сделать что-то вроде:
var txt = template($.xml2json($(xml).find('myelementname')[0]));
И все хорошо.
Я могу открыть еще один вопрос о том, знает ли кто-нибудь о шаблонизаторе Javascript, который принимает объекты json ИЛИ xml dom.