Шаблоны на стороне сервера, шаблоны на стороне клиента - Автоматическое преобразование?
В случае с плагином шаблонов 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.