Как правильно вызывать javascript и отображать партиалы для такого типа приложений (rails, с большим количеством javascript?) - PullRequest
0 голосов
/ 28 апреля 2011

В моем приложении на Rails 3 у меня есть несколько страниц с формами, где пользователь может создавать записи, а затем редактировать их.Чтобы создать запись, пользователь нажимает кнопку «Добавить запись», которая открывает модальное диалоговое окно с формой «Новая запись».Как только пользователь заполняет форму и нажимает Сохранить, модальное диалоговое окно исчезает, и таблица частично обновляется, показывая новую запись.Чтобы редактировать запись, пользователь нажимает на ссылку редактирования рядом с любой существующей записью, которая вызывает модальное диалоговое окно с формой, аналогичной форме «новая запись», но имеет заголовки «Редактирование записи» и «Сохранить изменения».и т. д.

Сейчас я делаю это с двумя частями: частичной таблицей и частичной формой.Часть формы показывает заголовки «Редактировать», основываясь на том, является ли переменная @editing истинной.

В настоящее время она работает так, что когда пользователь нажимает кнопку «Новая запись», он имеет функцию onClick, которая выполняет две функции.

1) ajax-вызов jquery для «нового» действия, которое создает необходимые объекты и отображает частичную часть следующим образом:

@editing = false
respond_to do |format|
    format.js
    {
      render :update do |page|
         page["#entry_div"].html(render :partial=> 'form');
      end
  }
end

2) вызов jquery, который показывает div в видемодальное диалоговое окно (simplemodal).

Нажатие кнопки редактирования объекта делает то же самое, за исключением того, что действие "edit" устанавливает @editing в значение true, а вызов Ajax отправляет идентификатор редактируемого объекта.

Кроме того, когда пользователь нажимает сохранить и объект сохраняется, оба действия «создать» и «обновить» выполняют следующее:

respond_to do |format|
    if @record.save
    @all_records = Record.where(:project_id => @project.id).all
        format.js {
            @save_message_div = 'save_message_div'
            @table_container = 'table_div'
            @table_partial = 'table'
            @form_partial = 'form'
            @form_container = "entry_div"
            render 'saved'
        }
    end
end

«сохранен» - это файл .rjs, который обновляетчастичная таблица, сбрасывает форму и показывает сообщение «успешно сохранено».

Мой вопрос, в основном, я делаю это правильно?Какой самый современный, эффективный и ненавязчивый способ сделать эти звонки?Должен ли я по-прежнему использовать вызовы типа page ["# divname"]. Html (частичное отображение) в своих действиях?Должен ли я по-прежнему использовать файл rjs для перезагрузки партиалов и отображения сообщений сохранения?Если нет, как я могу справиться с этими ситуациями (загрузка паролей и т. Д.)?

Большое спасибо и дайте мне знать, если вам нужна дополнительная информация.

1 Ответ

1 голос
/ 28 апреля 2011

Я бы посоветовал вообще не использовать RJS (т.е. render: update).
То, что вы должны смотреть на это UJS (ненавязчивый JavaScript).
Обычно идея заключается в том, что вы отвечаете JSON из действий вашего контроллера, а затем используете эти данные для соответствующего заполнения или изменения ваших представлений.
Вы также можете вернуть предварительно обработанный фрагмент из контроллера (через render_to_string) и заменить на него любые существующие элементы на странице.

@model = Model.create(params[:model])

respond_with do |format|
  format.json { render :json => @model.to_json }
  format.html { # do something else }
end

А теперь в своем javascript вы связываете обратный вызов с вашим ответом AJAX и используете возвращенный JSON для манипулирования вашим DOM, как вам хочется.

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