Я хотел бы использовать jQuery Templates. На первый взгляд, тег {{tmpl}}, похоже, подходит, но мне нужно сделать дополнительный шаг при шаблонизации, и я не могу понять, как это сделать.проблема с вложенными шаблонами
Существует определение типа данных, связанное с свойствами объекта данных. В приведенном ниже примере «movie» - текстовое поле, «выпущено» числовое поле. Все текстовые поля используют определенный шаблон, поэтому все числовые поля. Эти вложенные шаблоны ничего не знают о контексте (здесь фильмы), в котором они используются. Таким образом, тег, используемый там, всегда равен $ {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>
как это creatable конечных пользователей тоже, и должен быть как можно более простым
Умная идея :) Я действительно обошел эту проблему с помощью DOM. – user414873
Спасибо, я должен сделать что-то подобное при рендеринге другого «типа» базы td на какое-то значение. Plz как ответ, если вам нравится решение :) –