JavaScript Программистам
dfd-jtemplate - JS Шаблонизатор |
Позволяет использовать html-шаблоны для генерации конечных html-страниц. Основная цель — отделение представления данных от исполняемого кода. Использование шаблонизаторов часто улучшает читаемость кода и упрощает внесение изменений во внешний вид.
Первое что нужно сделать — подключить dfd-jtemplate:
<script src="js/dfd-jtemplate-v1.3.1.js"></script>
dfd-jtemplate генерирует HTML из JSON данных. Чтобы браузер мог распознать шаблон dfd-jtemplate, мы должны присвоить ему тип text/x-dfd-jtemplate, и указать ID, чтобы ссылаться на него позже.
<script id="template" type="text/x-dfd-jtemplate"> <h3>{{name}}</h3> </script>
После описания всех шаблонов необходимо инициализировать их
<script> $dfdJt.init(); </script>
Создаем источник данных, имя будет получено из объекта data и подставлено в шаблоне вместо {{name}}
var data = { name : "Мария Биешу" }
Для обхода массива используется конструкция {{#each array}}...{{/each}}
var data = { honoredText: "Народная артистка СССР", vocalists: [ { name : "Мария Биешу", voice : "сопрано", isHonored : true }, { name : "Пьер Бернак", voice : "баритон", isHonored : false } ] }
<script id="template" type="text/x-dfd-jtemplate"> <ul> {{#each vocalists}} <li> <b>{{name}}</b> - <i>{{voice}}</i> </li> {{/each}} </ul> </script>
Для проверки условий используется конструкция
{{#if isHonored}}...{{else}}...{{/if}},
также в контексте можно ссылаться на родительские переменные используя сегмент
../ перед переменной.
Комментарии начинаются с {{!--
и заканчиваются --}}.
<script id="template" type="text/x-dfd-jtemplate"> {{!-- This text will not be in the output --}} <ul> {{#each vocalists}} <li> <b>{{name}}</b> - <i>{{voice}}</i> {{#if isHonored}} - {{../honoredText}} {{/if}} </li> {{/each}} </ul> </script>
Пример
| Шаблон | Данные |
|---|---|
| Результат: | |
dfd-jloader - Загрузчик скриптов |
Для загрузки шаблонов будет полезным загрузчик скриптов. Загрузчик позволяет подгружать скрипты, таблицы стилей и шаблоны dfd-jtemplate, при этом скрипты загружаются в последнюю очередь и сохраняется последовательность загрузки.
Для инициализации в html код нужно добавить следующее:
<script src="js/dfd-jloader-v1.0.3.js"></script>
Далее функции $dfdJl.load передаем список файлов, которые мы хотим загрузить. При этом расширение файла имеет значение: js - скрипты JavaScript, htm - шаблоны dfd-jtemplate, css - таблицы стилей.
<script> $dfdJl.load([ "../dfd-jtemplate/dfd-jtemplate-v1.3.1.js" ,"1.js" ,"1.htm" ,"dfd-style.css" ,"ie-onload.js" ]); </script>
И на событие onload документа вызываем функцию:
function bodyLoad(){
$dfdJt.init();
document.getElementById('div1').innerHTML=
$dfdJt.htm('template1',data1);
}
Но в explorer-е (во всех версиях) событие onload документа может наступить до загрузки и выполнения скриптов, поэтому последний скрипт, который мы загружаем должен содержать следующее:
if (document.readyState=="complete")
bodyLoad();
else
window.onload=function(){bodyLoad();}