предварительно скомпилировать шаблоны JavaScript для функций при сборке проекта - PullRequest
2 голосов
/ 24 июня 2011

Обновление Я хочу избежать компиляции шаблонов на стороне клиента и заставить их компилироваться во время моего локального процесса сборки муравья.Возможно, что-то вроде загрузки шаблонов jQuery и jQuery в rhino, передачи функции $.template() содержимого каждого файла .jst по очереди и создания файла templates.js, который должен содержать:

$.template['model-view'] = resultingFunction.toString();
// 1 for each .jst file

Таким образомЯ могу сохранить каждый шаблон в отдельном файле и избежать того, чтобы все клиенты избыточно компилировали один и тот же шаблон.


Я использую шаблоны jQuery и надеюсь разделить их на свои собственные файлы (например, model-view.jst), которые компилируются в функции при сборке проекта и становятся доступными в области jQuery .tmpl () для последующего использования.

Например, для файла model-view.jst

<li>${name}</li>

Этот файл и все другие файлы .jst должны быть собраны при сборке, скомпилированы в функцию, которая впоследствии может использоваться в любом месте программы, например:

$.tmpl('model-view', {
    name: 'Matt'
});

Ответы [ 2 ]

1 голос
/ 10 июля 2011

Я решил эту проблему, используя Node.js и coffeescript, превратив каталог частичных шаблонов в исполняемые, предварительно скомпилированные функции. Надеюсь, это поможет.

https://github.com/wookiehangover/jquery-tmpl-jst

0 голосов
/ 24 июня 2011

Я позволю вам решить, нравится вам это или нет :) 1001 *

в вашей общей js-библиотеке определите эту функцию:

function loadTemplate(templateName) {
   $.ajax({
      url: templateName + '.jst',
      success: function(data) {
         $.template(templateName, data);
      }});
}

Затем в свой мастер-файл hml <head></head> раздела вы можете добавить:

<script type="text/javascript">loadTemplate('model-view');</script>
<script type="text/javascript">loadTemplate('another-model-view');</script>

так что вы можете использовать в любом месте вашего кода

$.tmpl('model-view', your-data)
$.tmpl('another-model-view', your-data)

Надеюсь, это поможет

...