Предварительно скомпилируйте шаблоны усов или загрузите их извне?

Было бы полезно иметь функцию Coffeescript include, чтобы она могла загружать внешние шаблоны усов при компиляции в javascript и не загромождать файлы кофе.

На самом деле вы можете загружать файлы .mustache во время выполнения, но вам нужно вызвать их с помощью запроса ajax с некоторыми нарушениями производительности.

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

Для этого существует проект или script?

Ответ 1

Я думаю, что это решение для вас, javascript шаблона precompiller для усов и othe шаблонов двигателей https://github.com/kupriyanenko/jsttojs

например, используйте с командной строкой

jsttojs templates compiled/templates/index.js --ext mustache --watch

или использовать решение для grunt, grunt-jsttojs

Ответ 2

Прежде всего вы можете использовать что-то вроде этого:

<script type="text/x-mustache" id="tid...">
  ... mustache template ...
</script>

включить ваши шаблоны в выделенные блоки script, а не как строки в коде. getElementByID() + innerHtml() предоставит вам источник, который вы можете использовать.

Об усах вообще - вы не можете его скомпилировать строго говоря. Шаблоны интерпретируются каждый раз, когда вы "создаете экземпляр" шаблона.

Если вам нужно скомпилировать их, подумайте о том, как использовать мой движок Kite: http://code.google.com/p/kite/ или любые другие скомпилируемые шаблоны: http://jsperf.com/dom-vs-innerhtml-based-templating/99

Ответ 3

Абсолютно, это то, что мы делаем, где я работаю. Все шаблоны входят в один файл html и вставляются в dom во время сборки. Каждый шаблон хранится в теге script неизвестного типа, поэтому браузер просто игнорирует его. Затем вы можете ссылаться на них с помощью селекторов.

<script type="unknown" id="id_of_template">
  <ul>
  {{#words}}
    <li>{{.}}</li>
  {{/words}}
  </ul>
</script>

render = (template) ->
  view =
    words: [ 'hello', 'there' ]
  template = $('#' + template).html()
  html = Mustache.to_html template, view

У Джона Ресига есть хорошая статья о технике http://ejohn.org/blog/javascript-micro-templating/

Ответ 4

Я смотрю на что-то подобное. Я еще не пробовал этого, но, похоже, вы могли бы использовать Node.js и Mu, сборку Усы для Node.js, чтобы сделать это. Псевдо-JS-код...

var compiledTemplate = Mu.compile("myTemplateFile.html")
fs.writeFile("myCompiledTemplate.js", compiledTemplate.toString());

Ответ 5

Библиотека Twitter Hogan.js выполняет задание.