Ответ 1
Этот вопрос очень интересный! У меня была такая же проблема несколько месяцев назад, когда я начал использовать усы для "огромных" шаблонов front-end в проекте рельсов.
У меня получилось следующее решение...
Шаблоны Усы находятся в общей папке:
/public/templates/_template_name.tpl
Всякий раз, когда мне нужен шаблон, у меня есть этот вспомогательный getTemplate, который делает некоторые вещи (есть некоторые mootools, но есть комментарии тоже):
// namespace.templatesCache is an object ( {} ) defined inside the main app js file
var
needXHR = false, // for callback function
templateHTML = ""; //template html
if(!(templateHTML = namespace.templatesCache[template_name])){ //if template is not cached
templateHTML = (this.helpers.supportLocalStorage) ? localStorage.getItem(template_name) : ""; //if browser supports local storage, check if I can retrieve it
if(templateHTML === "" || templateHTML === null){ // if I don't have a template (usually, first time), retrieve it by ajax
needXHR = true;
new Request.HTML({ //or jQuery $.get( url /*, etc */ )
url: namespace.URLS.BASE+"templates/_"+template_name+".tpl", // url of the template file
onSuccess : function(t, e, html, js){
namespace.templatesCache[template_name] = html; //cache it
if(_this.helpers.supportLocalStorage){ //and store it inside local storage, if available
localStorage.setItem(template_name,html);
}
//call callback
}
}).get();
}else{ //retrieved by localStorage, let cache it
namespace.templatesCache[template_name] = templateHTML;
}
}
if(!needXHR){ // I retrieved template by cache/localstorage, not by Ajax
//call callback
}
и я называю этот помощник таким образом:
namespace.helpers.getTemplate('template_name', function( templateHTML ){
// the callback function
});
Вы можете заметить, что первому пользователю нужен шаблон, есть асинхронный запрос (вы можете сделать запрос синхронизации, если вы не хотите обертывать какой-либо другой код внутри обратного вызова)
Я надеюсь, что это может помочь, и я хотел бы получать отзывы/предложения по этому поводу:)