Как сделать так, чтобы всплывающее окно оставалось открытым, а содержимое внутри изменялось после отправки - PullRequest
1 голос
/ 17 апреля 2010

Я всего лишь JQuery n00b . В моем приложении rails это то, что происходит:

Я на главной странице, нажимаю эту ссылку:

<a href='/betas/new' rel='facebox'>Sign up</a>

Появляется красивое всплывающее окно с изображением лица, которое отображает эти виды и содержащую их форму:

# /app/views/invites/new

<% form_tag({ :controller => 'registration_code', :action => 'create' }, :id => 'codeForm') do %>

    <%= text_field_tag :code %>
    <br />
    <%= submit_tag 'Confirm' %>
<% end %>

Я читаю при отправке, и если код действителен, пользователь попадает на другую страницу в другом контроллере:

def create
  # some stuff
  redirect_to :controller => 'users', :action => 'type'
end

Теперь я хотел бы сделать эту страницу ВНУТРИ ЖЕ всплывающего окна содержит форму после нажатия кнопки отправки, но у меня НЕТ ИДЕИ, как это сделать. Я пробовал FaceboxRender , но это происходит:

Оригинальная версия:

# /controllers/users_controller
def type
end

Если я изменю это так, ничего не произойдет:

# /controllers/users_controller
def type
  respond_to do |format|
  format.html
  format.js { render_to_facebox }
 end
end

Если я изменю это так (я знаю, что это неправильно, но я n00b, так что все в порядке: -):

# /controllers/users_controller
def type
  respond_to do |format|
  format.html { render_to_facebox }
  format.js
 end
end

Я получил это:

try {
jQuery.facebox("my raw HTML from users/type.html.erb substituted here")'); throw e }

Какие-нибудь решения?

СПАСИБО ТАК МНОГО !!


Теперь я получаю Ошибка «Ajax не определен» из консоли Firebug. Что это значит?

1 Ответ

0 голосов
/ 18 апреля 2010

Вы можете продолжить использовать facebox_render или одну из его вилок, это сделает все немного проще:)

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

В контроллере вы получите запрос AJAX, обработаете его с помощью response_to.js, а затем снова сможете сделать render_to_facebox. Теперь вы увидите, что вы хотите внутри лицевой коробки.

По виду:

# /app/views/invites/new
<% form_remote_tag({ :controller => 'registration_code', :action => 'create' }, :id => 'codeForm') do %>

    <%= text_field_tag :code %>
    <br />
    <%= submit_tag 'Confirm' %>
<% end %>

А в контроллере:

# /controllers/users_controller
def type
  respond_to do |format|
    format.html
    format.js { render_to_facebox }
  end
end

Надеюсь, это немного поможет, чао!

...