Rails: это правильный способ вернуть диалог AJAX, загруженный с сервера? - PullRequest
0 голосов
/ 22 февраля 2011

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

Для этого я использую Наложение прототипа (я использую Prototype для AJAX) для создания диалога, и после того, как диалог создан, я звоню:

new Ajax.Updater("div_inside_the_dialog",
                 "url_for_the_content",
                 {method: 'get', requestHeaders:{Accept:'text/javascript'}});

Я также добавил в свой контроллер url_for_the_content:

respond_to do |format|
  format.js
  format.html
end

Таким образом, при щелчке по ссылке создается диалоговое окно, мой контроллер для url_for_the_content, который видит, что я делаю запрос JavaScript, и возвращает некоторые данные для отображения внутри диалогового окна.

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

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

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

1 Ответ

1 голос
/ 22 февраля 2011

Я не слишком знаком с тем, как вы вызываете обновленный Ajax, но я предпочитаю просто отображать формы через Ajax, что также должно четко указывать, почему вы будете вручную кодировать запрос на возвращение Javascript в заголовок вашего запроса.Обычно я делаю это, сохраняя файл js.erb в папке представлений, соответствующей имени вашего контроллера.Итак, в Views / (Controller_Name) / у меня есть файл с именем (Action_Name) .js.erb, который будет выглядеть примерно так:

$("div_to_update").update("<%= escape_javascript(render('updateform')) %>")

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

...