HTML-шаблоны в Javascript? Без кодирования на странице?

Я веб-парень, делающий в основном серверные вещи Perl, и я постепенно перехожу к нескольким выводы.

  • Гораздо лучше выполнять большую часть кода через Javascript и перебрасывать данные туда и обратно через AJAX, чем нажимать кнопку «Отправить» и перезагружать практически идентичную страницу.
  • Мне нравится jQuery, потому что мне нравится CSS, и это весело объединить вместе большие длинные и пугающие других определения
  • В этом шаблонном материале что-то есть.

Вы хотите, чтобы ваши HTML-элементы выглядели так же, как ваши HTML-элементы, и это проще определить в HTML:

<div class="sidebar_elem">
     <a href=""> TEXT</a>
</div>

Чем то же самое в Javascript или jQuery:

( '<div/>' )
     .attr('id' , 'sidebar_elem' + i )
     .addclass( 'sidebar_elem' )
     ;
( '<a/>' )
     .attr('href' , link_url )
     .appendTo( '#sidebar_elem' + i )
     ;

Это означает, что я больше не агностик шаблонов, но я не знаю, в какой шаблонизатор мне верить. Я изучал некоторые Плагины шаблонов на основе jQuery, но я еще не доволен ни одним из них, отчасти потому, что те, которые я видел, похоже, хотят поместить весь этот код на саму страницу, что нарушает "Только разметка идет в файлы HTML , только стиль входит в файлы CSS, только код входит в файлы JS ", я продолжаю повторять мантру.

Итак, я ищу инструмент для создания шаблонов на основе Javascript, который позволил бы мне размещать свои шаблоны во внешнем файле, поэтому я одно изменение шаблона может охватывать серию веб-страниц. Если он основан на jQuery, это здорово, мне нужно учить меньше вещей, но это не помеха.

14
задан Dave Jacoby 27 August 2010 в 15:14
поделиться

8 ответов

Как насчет EJS?

Пример с их страницы:

"EJS объединяет данные и шаблон для создания HTML."

Данные:

{title: 'Cleaning Supplies',  supplies: ['mop', 'broom', 'duster'] }

Шаблон:

<ul>
<% for(var i=0; i<supplies.length; i++) {%>
   <li><%= supplies[i] %></li>
<% } %>
</ul>

Результат:

  • швабра
  • метла
  • пыль
1
ответ дан 1 December 2019 в 14:31
поделиться

Две известные мне библиотеки, которые не смешивают кодирование шаблонов с HTML-разметкой, это chain.js и PURE

chain только для манипуляций с DOM. .
PURE использует сочетание DOM и innerHTML, так как только DOM может медленно отображать большие шаблоны.

Я являюсь основным участником PURE, и мы создали его для создания веб-приложения на основе описанной вами модели ajax.

2
ответ дан 1 December 2019 в 14:31
поделиться

Вы должны проверить шаблон закрытия Google. Он полностью независим, поэтому вы можете использовать его с любой библиотекой. Это инструмент для создания шаблонов, написанный на java.

http://code.google.com/closure/templates/docs/helloworld_js.html

Это позволяет вам создать шаблон на сервере, запустить на нем «компилятор» java, и на выходе получится javascript. функция, которая принимает json в качестве параметра.

{namespace examples}
/**
 * Greets a person using "Hello" by default.
 * @param name The name of the person.
 * @param? greetingWord Optional greeting word to use instead of "Hello".
 */
{template .helloName}
  {if not $greetingWord}
    Hello {$name}!
  {else}
    {$greetingWord} {$name}!
  {/if}
{/template}

Это создаст функцию с именем examples.helloName, которую можно вызвать как

Их формат очень удобен для IDE, я получаю подсветку всего синтаксиса HTML при редактировании шаблонов

examples.helloName({name: 'Ana', greetingWord:"Howdy"});

Вы можете вызывать другие шаблоны из шаблонов, он автоматически html экранирует ваши данные (если вы не скажете ему этого не делать), обеспечивает поддержку двунаправленности.

Еще одна замечательная особенность заключается в том, что шаблонизатор также может генерировать Java-код. Таким образом, кто-то, кто пишет приложение, которое должно поддерживать браузеры с отключенными сценариями, может при необходимости сгенерировать HTML на сервере.

И последнее, но не менее важное: в отличие от других систем шаблонов js (), шаблон анализируется на сервере, поэтому клиентская сторона должна выполнять только слияние шаблона и данных, анализ шаблона выполняется как сборка. шаг на сервер.

http://dev.sencha.com/deploy/dev/docs/?class=Ext.XTemplate — это пример инструмента для создания шаблонов, полностью работающего на клиенте. У этого подхода есть две проблемы: анализ шаблона выполняется на клиенте, и ваш html должен быть встроен в строку javascript. Однако некоторые IDE (Intellij) будут выделять HTML внутри строк JS).

1
ответ дан 1 December 2019 в 14:31
поделиться

У меня есть механизм шаблонов, называемый трафаретом.js, что, на мой взгляд, довольно приятно. Он работает с jQuery через механизм построения DOM jquery-haml.

Напишите свой шаблон (который вы можете поместить во внешний файл и декодировать как JSON):

["%div.sidebar_elem"
    ["%a", { href: { key:'link' } },
        { key: "text" }
    ]
]

И пропустите его через трафарет вместе с вашими данными:

$("#parent").stencil(template, { link: "http://example.com", text: "Click me!" });

Больше примеров на stencil.js Проект GitHub, но я думаю, что это именно то, что вам нужно.

Можно использовать еще пару служебных методов, а некоторый код для незавершенного компонента привязки данных все еще находится в ветке master, поэтому напишите мне комментарий, если вам интересно, и я посмотрю, будет ли Я могу очистить его.

0
ответ дан 1 December 2019 в 14:31
поделиться

А как насчет кода JAML?

http://github.com/edspencer/jaml

Похоже на некоторые из приведенных выше, но я считаю, что это немного более логично...

Это концепция определения ваших шаблонов с помощью JSON/JavaScript, а затем использования функции в JavaScript для передачи аргументов в ваш шаблон, который отображает его и возвращает как элемент.

Существуют реализации для различных существующих фреймворков JavaScript.

1
ответ дан 1 December 2019 в 14:31
поделиться

Есть несколько хороших:

Mustache.js
Pure.js
Шаблон Json

Если вам нужна версия jQuery, Tempest выглядит хорошо.

4
ответ дан 1 December 2019 в 14:31
поделиться

Взгляните на этот http://ejohn.org/blog/javascript-micro-templating/. Созданный Джоном Резигом, создателем jQuery, этот даже не нуждается в jQuery, и он чертовски маленький. Он также хранит шаблоны в теге script (ответ Даниэля). Пример шаблона:

<script type="text/html" id="user_tmpl">
    <% for ( var i = 0; i < users.length; i++ ) { %>
        <li><a href="<%=users[i].url%>"><%=users[i].name%></a></li>
    <% } %>
</script>

Может быть, вы можете загрузить их с помощью атрибута src, если вам действительно нужно, чтобы они были в отдельных файлах, что я не думаю, что это разумная идея, потому что это означает дополнительный обмен данными с сервером. Итак, в конце концов, ради оптимизации вы можете хранить их в отдельных файлах, но встраивать их на стороне сервера в ту страницу, которая в них нуждается.

2
ответ дан 1 December 2019 в 14:31
поделиться

Используйте блок script.

<script id="someId" type="text/html">
   <!-- your template here -->
</script>

и один из многих подключаемых модулей JQuery.

http://weblogs.asp.net/scottgu/archive/2010/05/07/jquery-templates-and-data-linking-and-microsoft-contributing-to-jquery.aspx

0
ответ дан 1 December 2019 в 14:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: