2009-03-14 5 views
4

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

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

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

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

ответ

4

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

+0

это, наверное, дело ... у меня будет меньше данных, проходящих через сеть, и это должно быть быстрее. Большое спасибо – karlipoppins

+0

Хорошее решение, чтобы сохранить ваш MVC в чистоте, но это не так, поскольку ваш конечный пользователь должен создавать HTML из JSON. – Magnar

0

Если 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 и получает вас избавиться от необходимости Concat все длинные строковые литералы внутри вашего PHP кода, который часто портит читаемость код.

+0

Это то, что я обычно делаю в своем коде. Мой вопрос касается ajax: сервер должен ECHO данных (прямо сейчас он перекликается с содержимым html div) каким-то образом .. – karlipoppins

+0

Хм, я думаю, что я не понял ваш вопрос. –

3

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

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

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

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

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

Другие структуры:

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

  2. Trimpath Javascript Templates: Не работает с JQuery/Prototype ... Также находится в стадии разработки.

  3. jQSmarty: Ницца, но кажется, что разработка прекратилась. Последнее изменение было в 2008 году.

  4. seethrough_js: Invasive шаблон макетирования. Приятно для людей Эрланга.

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

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

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

+0

Я проверю это благодаря – karlipoppins

1

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

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

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