AJAX и шаблон MVC


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

У меня есть страница с 5-6 разделами, которые могут быть индивидуально загружены с помощью Ajax-запросов. С помощью прототипа ajax.request() сервер (php) воспроизводит HTML-код для подразделения, прежде чем клиент обновит внутренние файлы divs.

Вот мой вопрос: Какова наилучшая практика сохранения шаблона MVC на на стороне сервера относительно HTML-кода, который он выбрасывает?

На данный момент мои модели возвращают данные базы данных контроллеру, позволяя ему инициировать действительно длинный var, содержащий HTML-код, который затем повторяется. Моя проблема в том, что в моих классах контроллеров я получаю много HTML-кода...

Author: karlipoppins, 2009-03-14

5 answers

Вы можете использовать JSON для передачи данных на клиентскую сторону и их построения там. Таким образом, у вас будет абстрактный источник данных, не связанный вашей разметкой. JSON может быть непосредственно преобразован в объект javascript.

 4
Author: Andy, 2009-03-14 16:14:59

Вам действительно нравится использовать MVC? C в основном может быть удален с помощью соглашений/URL-адресов RESTful.

Как сказал Энди, вы должны использовать JSON для передачи данных на сторону клиента. XML также является широко используемой альтернативой (потому что он действует намного лучше, если другие приложения должны использовать ваши сервисы). XML можно легко преобразовать в JSON! И код JSON является допустимым объектным кодом JavaScript. Таким образом, вы можете использовать его для прикрепления шаблонов на стороне клиента вместе с ним.

Вам следует попробовать EJS для шаблоны на стороне браузера/клиента! Если вы это сделаете, у вас не будет шаблона HTML в ваших контроллерах! Просто бизнес-логика. Это следует из множества лучших практик SOA. Шаблон архитектуры называется SOFEA или SOUI (что одно и то же).

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

Потому что: 1. Это быстро! 2. Это бесплатно (лицензия MIT)! 3. Он хорошо работает с jQuery 4. Это действительно изменяет DOM, так что другие методы могут получить доступ к используемым шаблонам (JS Repeater этого не делает).

Другие фреймворки:

  1. Jsmarty: Не такой простой в использовании, но он может использовать шаблоны Smarty. Это не доказано и все еще находится в стадии интенсивной разработки.

  2. Шаблоны Javascript Trimpath: Плохо работает с jQuery/прототипом... Также все еще находится в стадии разработки.

  3. Jqsmarty: Приятно, но, похоже, разработка имеет остановился. Последнее изменение было в 2008.

  4. Seethrough_js: Инвазивная компоновка шаблона. Приятно для людей Эрланга.

  5. JsonML: Также инвазивный формат шаблона, основанный на JSON. Что вы об этом думаете? Я думаю, что дизайнеры должны оставаться на своих элементах HTML/CSS, чтобы знания не пропадали даром.

  6. JS Repeater: Напоминает мне о моих собственных неудачных попытках. Я проверил его и использовал.. но он не справляется со многими все очень хорошо. (Например, пустые поля и т. Д.)

  7. Pure: Пришло время начать войну легионов о том, как разрабатывать страницы? Я думаю, что Чистота - это не ответ. Он раздувается, если вы определяете, что на самом деле нужно делать, и он не масштабируется, как JSF. В нем нет инвазивного синтаксиса, это очень хорошо. Но цена сложных в использовании правил для рендеринга проблем для меня не подходит. Это просто кажется неправильным. Я встречал других людей, которые думают совершенно иначе! Проверьте это и дайте мне знать, что вы думать.

 3
Author: Martin K., 2009-03-14 17:10:00

Это то, что я делаю для MVC + AJAX...

Действительно простая реализация, если бы вы спросили меня.

Http://jarrettatwork.blogspot.com/2009/02/aspnet-mvc-ajax-brief-introduction.html

 1
Author: Jarrett Meyer, 2009-03-14 17:20:15

Если вы считаете, что самая важная буква в MVC - это V для работы с AJAX. AJAX с HTML, а JS является частью уровня представления, поэтому теоретически это место для части представления.

Представление отвечает за то, что вы отправляете конечному пользователю, и MVC patter предназначен не только для разделения модели, представления и контроллера, но и для предоставления нам нескольких представлений для одной и той же предоставленной модели данных.

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

 1
Author: zidane, 2009-04-02 07:43:45

Если HTML в основном состоит из строковых литералов, как я понимаю, вам, вероятно, следует полностью переместить HTML за пределы тегов ?> и вставить динамическое содержимое из базы данных с небольшими встроенными фрагментами PHP, которые ссылаются на переменные, установленные контроллером.

По сути, это шаблонный механизм. Помните, что PHP по своей сути является шаблоном.

Пример:

<?php
include 'controller.php'; // set variables used below
?>
<div>
   <h1>Hi there, <?=$UserName?></h1>
   <p>Since you've been here, <?=$numberOfDays?> days have gone by</p>
</div>

И т.д. Это также вернет вам подсветку синтаксиса в вашем HTML и избавит вас от о необходимости объединять все длинные строковые литералы внутри вашего PHP-кода, что часто ухудшает читаемость кода.

 0
Author: Hanno Fietz, 2009-03-14 16:26:22