Я хотел бы использовать шаблоны jQuery . На первый взгляд тег {{tmpl}} кажется правильным, но мне нужно сделать дополнительный шаг при создании шаблонов, и я не могу понять, как это сделать.
Существует определение типа данных, связанное со свойствами объекта данных. В приведенном ниже примере «фильм» представляет собой текстовое поле, «освобожден» числовое поле. Все текстовые поля используют определенный шаблон, как и все числовые поля. Эти вложенные шаблоны ничего не знают о контексте (здесь о фильмах), в котором они используются. Поэтому используемый тег всегда содержит только $ {value}.
Вместо этого «внешний» шаблон знает, как должен выглядеть фильм. Его теги (фильм и выпущенный) заменяются «внутренними» шаблонами, связанными с типом данных. Дополнительным шагом является замена $ {value} до того, как будет выполнен внешний шаблон.
Все, что я мог придумать, это:
//the template used for all string-fields
var templForStrings = "<b>${value}</b>";
//the template used for all numeric fields
var templForNum = "<i>${value}</i>";
//data of a movie
var data = {};
data.movie = "Cowboys and Aliens"; //a string field
data.released = 2011; //a numeric field
//the template to show a movie
var templForMovies = "<div>{{html movie}} ({{html released}})</div>";
//normally a loop over the fields here
var field = {value: data.movie};
data.movie = $.tmpl(templForStrings, field).fullhtml();
field.value = data.released;
data.released = $.tmpl(templForNum, field).fullhtml();
//now the movie template
$.tmpl(templForMovies, data).appendTo("body");
Конечно, этот сценарий упрощен. Шаблоны типов данных намного сложнее. Данные могут быть чем угодно. Поскольку $ {value} означает две разные вещи, я не вижу, как использовать вложенные шаблоны, как это предусмотрено плагином. Но я совершенно уверен, что есть более элегантный и быстрый способ, чем мой код (для которого даже нужен fullhtml-Plugin . Было бы действительно неплохо иметь такой шаблон
<div>${movie} (${released})</div>
, так как они также доступны для конечных пользователей и должны быть максимально простыми.