Шаблоны на стороне сервера, шаблоны на стороне клиента - Автоматическое преобразование?

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

Потому что в моем случае у меня есть несколько шаблонов, которые будут дублировать - как на стороне сервера, так и на стороне клиента. Только представьте себе:

У вас есть форма, в которой вы можете ввести точки списка. Когда вы нажимаете кнопку "Отправить", создается запрос AJAX, но запись уже отображается на вашей странице.

Теперь разметка для этой маркерной точки должна быть одинаковой - если бы она была сгенерирована через JS или моим PHP/.NET/любым приложением.

Есть ли хорошие способы поддерживать эти шаблоны/синхронизировать их? Или мне действительно нужно вручную поддерживать оба шаблона?

Каков ваш опыт в приложениях с использованием шаблонов JS?

Ответы

Ответ 1

Если вам нравится JS- > приоритет PHP:), то у вас есть этот два jquery-tmpl-совместимого средства визуализации шаблонов для PHP-бэкэнд

Если вы предпочитаете больше PHP- > JS priority:), тогда вы можете попробовать эту реализацию Javascript популярных шаблонов PHP Smarty

Или вы можете попробовать что-то более нейтральное, например:

Ответ 2

Моя коллега - автор парсера .NET, о котором вы упоминаете, поэтому я использовал его для обмена шаблонами между клиентом и сервером. Быть ясным - это тот же шаблон, тот же файл, независимо от того, обрабатывается ли он на клиенте или сервере. Таким образом, нет дублирования/поддержания головных болей, что очень приятно.

Единственное предостережение, с которым мы столкнулись, - это продвинутая логика. Данные, которые требуется предоставить шаблону, должны быть более или менее готовыми к печати во время рендеринга. Таким образом, проверки длины массива должны быть логическими с результатом, строки должны быть множественными, даты должны быть отформатированы и т.д. Я считаю, что Aaron работает над тем, чтобы передавать функции в качестве именованных параметров в версию .NET, так что например функция множественного доступа, доступная в рамках шаблона на стороне клиента, может быть реплицирована на С# и использоваться таким же образом на сервере, что позволяет делать больше логики и обработки в шаблоне. Тем не менее, даже для предварительной обработки данных это было невероятно полезно.

Ответ 3

У Spark View Engine (.NET) есть функция отображения javascript: http://blog.robertgreyling.com/2009/11/teaching-javascript-how-to-render-your.html

Другой способ иметь только один набор шаблонов - это делать только рендеринг на стороне сервера, используя ajax для получения обновленного html с сервера.

Ответ 4

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

Я использовал jquery-tmpl на сайте, который из-за огромного количества запросов потребовал технику, которую я называю decontextualization. Этот метод был реализован только для того, чтобы оставаться в живых в часы пик и состоит только из следующих правил:

  • Никогда не прикасайтесь к серверу для регенерации страницы более одного раза; если он абсолютно не нужен.
  • Используйте JavaScript, чтобы обеспечить состояние , кто пользователь и какие привилегии у него есть.

С учетом этих двух правил вы можете заметить, что jquery-tmpl с базовым объемом логики, который он предоставил, был просто величественным для данного случая. В основном я использовал шаблоны jquery-tmpl в документах, которые должны быть деконтекстуализированы. Все шаблоны были предоставлены самой страницей; поэтому я мог бы создать javascript-библиотеку d18n, которая могла бы сделать следующее:

  • Запросить действительно быстрый script о текущем пользователе, вернуть данные как объект JSON.
  • Пройдите JSON и включите шаблоны, указанные в документе, в указанных селекторах. Пусть jquery-tmpl выполняет математику.

Всякий раз, когда нам нужно было внести изменения в "tempalte", мы сделали бы это так же, как мы это сделали бы, если бы не было jquery-tmpl доступных: НА ВИДЕО/ЧАСТИЧНО.

Вы бы посмотрели что-то вроде этого для "может ли пользователь редактировать сообщение?" шаблон:

<script id="post-edit-button" type="text/x-jquery-tmpl">
  {{if user_id == "<%= post.user.id %>" || role == "staff" || $.inArray(user_id, EDITORS) }}
    <a href="<%= edit_post_url(post) %>">Edit</a>
  {{/if}}
</script>

Надеюсь, что мой опыт будет полезен для вас в некоторой степени.

Ответ 5

Я использую для этого XSLT. Не каждый является поклонником своего синтаксиса, но он является кроссбраузером, быстрым и работает - и вы даже можете иметь шаблоны на стороне клиента без особого труда, если какие-либо сценарии вообще используют форму, нацеленную на встроенный iframe, чтобы иметь преимущество в малой степени - проводные документы (немного больше, чем json, но не очень). устройства iOS не поддерживают его; им нужно будет использовать версию с шаблонами на сервере, но самое приятное, что тривиально возможно с теми же шаблонами.

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