Мне нравится ссылочная статья в вашем обновлении, за исключением предположения, что вы не можете кэшировать шаблоны, если не вставите их в DOM.Из jQuery.tmpl документации ,
"Для кэширования шаблона при использовании разметки, получаемой из строки (а не из встроенной разметки на странице), используйте $.template( name, markup )
для созданияименованный шаблон для повторного использования. См. jQuery.template () . "
. Используя это, мы можем создать систему управления шаблонами javascript, которая позволяет нам загружать столько шаблонов одновременно, сколько мынужно, сохраняя DOM в чистоте.На клиенте храните хэш объектов шаблона по имени.Здесь вы можете использовать свой любимый шаблон javascript на основе объектов, но я думаю, что структура может быть такой:
templates[templateName] = {
templateMarkup: markupFromServer,
loadedAt: Date.now(),
compiledTemplateFunction: jQuery.template( templateName, markupFromServer )
}
Затем используйте шаблоны для генерации HTML следующим образом:
templates['unique-name'].compiledTemplateFunction(inputData)
Затем создайте механизм выгрузки для освобождения памяти:
function unload(templateName) {
delete templates[templateName];
delete jquery.template[templateName];
}
Наиболее важно, что теперь у вас есть метод хранения нескольких шаблонов, так что вы можете делать такие запросы: $.get('/TemplateManagement/Render', arrayOfTemplateNamesToLoad, loadManyTemplatesSuccess)
для загрузки нескольких шаблонов одновременно.Единственное, что нам нужно, это контроллер TemplateManagement
, который будет принимать массив имен шаблонов в качестве входных данных и возвращать JSON, который связывает имя шаблона с его разметкой.Есть несколько способов сделать это, но мне кажется наиболее удобным является определение частичных представлений для каждого шаблона.В ASP.NET MVC 3 вы можете использовать эту технику и RenderPartial
для передачи разметки каждого шаблона в ответ JSON.Частичные представления можно назвать так же, как шаблоны, или сопоставить имена каким-либо пользовательским способом.