Backbone.js и CakePHP

Я заинтересован в реализации Backbone.js для некоторых более повторяющихся внутристраничных структур CRUD в нашем приложении (которое построено на основе CakePHP). Я пытался ухватиться за Backbone, выясняя, как он будет работать вместе с Cake, и я немного потерял, когда дело доходило до разделения обязанностей обеих сторон.

Я пытаюсь что-то влезть на мой сайт, который не обязательно должен быть там? Есть ли приоритет для такой структуры стека? Я все уши в этот момент.

Ответы

Ответ 1

Я действительно работаю в той же ситуации прямо сейчас (хотя с Python/Flask, но те же понятия должны применяться к любому серверному языку). Вот как работает рабочий процесс для моей страницы. Просто обратите внимание, что я НЕ выполняю формат одностраничного приложения; в моем приложении каждая основная страница является полной перезагрузкой.

  • Пользователь запрашивает страницу, скажем, список компаний,/компании/листинг/
  • Сервер выполняет маршрутизацию, загрузку правильного контроллера
  • Контроллер загружает первые X-компании из БД
  • Компании кодируются как JSON
  • Загружаются другие метаданные (например, общее количество компаний) и превращаются в JSON
  • Загружается шаблон страницы списка, и JSON выскочил в <script> тег в шаблоне. Обратите внимание, что здесь я не заполняю таблицу листинга или что-то в этом роде, я позволяю Backbone делать все это. Я заполняю JSON здесь, поэтому клиенту не нужно делать второй запрос для первоначального набора компаний.
  • Страница списка отправляется клиенту. На данный момент сервер выполнен
  • У клиента есть все необходимые ему данные, поэтому я беру JSON и передаю его в свой Backbone.View для страницы с листингом
  • Представление создает коллекцию для моделей и управляет набором под-представлений, которые представляют записи в списке
  • Любая другая обработка/просмотр создается, например, создание страниц, предыдущие/следующие кнопки и т.д.
  • Если пользователь нажимает на следующую страницу компаний, я запускаю запрос AJAX на сервер (/companies/listing/page/1 или что-то еще), который возвращает новую строку JSON с новым набором моделей
  • Отправьте новый набор моделей в мой Backbone.View, который обновляет все.

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

Для формы, в действительно широких штрихах, я делаю что-то вроде этого:

  • Форма запроса пользователя/компании/изменить/1
  • Сервер выполняет проверку разрешений, загружает запись, отправляет шаблон /JSON клиенту. Сервер не заполняет форму данными
  • Клиент использует JSON для заполнения формы
  • Клиент изменяет форму, попадает в submit
  • Все их изменения применяются к модели, модель превращается в JSON и отправляется на сервер с помощью AJAX
  • Сервер выполняет проверку и отправляет сообщения об ошибках (в JSON) клиенту или обновляет базу данных и отправляет успешное сообщение

Итак, опять же, это действительно широкие мазки, как я это сделал. В общем, я использую сервер для захвата данных из базы данных, проверки на стороне сервера (не могу доверять клиенту heh) и обновлять базу данных.

Если у вас есть какие-то конкретные вопросы, я был бы рад попытаться поделиться тем, что я узнал до сих пор.