Rails: автосохранение в стиле GoogleDocs - PullRequest
6 голосов
/ 06 сентября 2010

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

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

Решение, которое я придумала, заключается в том, чтобы на моей странице была скрытая форма, которая фактически была отправлена, а затем на странице разбросаны несколько «фиктивных» форм, которые обновляют скрытую форму.1005 *

После отправки скрытая форма обновляет модель, а модель содержит логику для определения, какие файлы RJS должны быть возвращены в ответ.Они объединяются и отправляются в качестве ответа на обновление.

некоторые ограничения:

  • Невозможно обернуть всю страницу в один тег формы (их несколькомодели / контроллеры на странице)
  • Одно и то же поле может редактироваться из разных мест

У кого-нибудь есть более эффективный способ?

1 Ответ

3 голосов
/ 06 сентября 2010
  • создайте на своей странице столько формы, сколько вам нужно, даже одного экземпляра той же модели
  • Запуск обновления будет либо вызовом javascript setInterval, либо onblur в полях формы.
  • ваш контроллер должен быть REST, и он будет возвращать сообщения об успехе или ошибках в переменных json и статус HTTP (200, 422)
  • Забудь о RJS, думай о клиенте. Каждая форма на вашей странице будет отправлять форму в метод обновления вашего контроллера. Javascript, отправляющий форму, будет иметь сообщение об ошибке или об успешном завершении, которое затем покажет сообщения об успехе или об ошибке. Идея состоит в том, что javascript, отправляющий форму, «знает», какую форму она отправляет в настоящее время, и он должен быть способен показать ошибку или успех сам по себе, в зависимости от формы, которую он отправляет, это не задание контроллера.
  • Сохранение всей страницы - это просто сериализация всех полей из всех форм и отправка их в метод обновления. (см. сериализация )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...