Шаблоны на стороне сервера, шаблоны на стороне клиента - Автоматическое преобразование? - PullRequest
14 голосов
/ 20 декабря 2010

С помощью плагина шаблонов jQuery мне интересно, как поддерживать шаблоны как на стороне сервера, так и на стороне клиента.

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

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

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

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

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

Ответы [ 5 ]

5 голосов
/ 01 апреля 2011

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

  1. https://github.com/abackstrom/jquery-tmpl-php
  2. https://github.com/xyu/jquery-tmpl-php

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

  1. http://code.google.com/p/jsmart/

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

  1. Усы http://mustache.github.com/
0 голосов
/ 20 мая 2011

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

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

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

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

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

Всякий раз, когда нам нужно было изменить «tempalte», мы делали бы это так же, как если бы не было jquery-tmpl: НА ПРОСМОТРЕ / ЧАСТИЧНО .

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

<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>

Надеюсь, мой опыт пригодится вам в какой-то степени.

0 голосов
/ 02 января 2011

Spark View Engine (.NET) имеет функцию рендеринга JavaScript: http://blog.robertgreyling.com/2009/11/teaching-javascript-how-to-render-your.html

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

0 голосов
/ 27 января 2011

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

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

0 голосов
/ 31 декабря 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...