Я пытаюсь реализовать регистрацию ajaxy с помощью rails 3. Я использую jquery-ujs и удаленную форму.Я получаю доступ к форме регистрации по запросу $.get
, и она отображается правильно.Эта форма регистрации удалена:
form_for @user, :remote => true, :html => {"data-type" => "html"} do |f|
В моем application.js, если запрос ajax для получения формы выполнен успешно, я пытаюсь связать обработчик для событий ajax из ненавязчивого JavaScript:
var load_remote_form = function(evt) {
var href = $(this).attr('href');
// load form template
$.get(href, {}, function(data) {
$('body').append(data);
$('form[data-remote]').bind("ajax:beforeSend", function(e) {
console.log("Caught beforeSend!");
});
});
evt.preventDefault();
};
$(document).ready(function() {
$('a#signup').click(load_remote_form);
});
Инструменты разработки Chrome показывают, что событие "ajax:beforeSend
" связано, но оно никогда не обрабатывается (у меня ничего нет в консоли javascript при отправке формы, хотя в журнале rails я вижу, что запрос обрабатываетсяправильно и ответ отправлен).Я могу привязать другие события к тому же селектору (form[data-remote]
), как click
, и они обрабатываются правильно.
События Ajax, связанные через .live
, также не обрабатываются.Но если форма отображается как часть макета (т. Е. Она находится на отдельной странице, например http://localhost:3000/signup/),, с привязкой «ajax:beforeSend
» обрабатывается правильно.
Мой контроллер (только для случая, это может быть плохо написано, но я почти уверен, что это работает):
class UsersController < ApplicationController
layout :layout_for_type
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
session[:user_id] = @user.id
flash[:notice] = "You have successfully registered."
redirect_to root_url
else
if request.xhr?
render :action => 'new', :status => :unprocessable_entry, :layout => false
else
render :action => 'new'
end
end
end
def layout_for_type
request.xhr? ? nil : "application"
end
end
Что я делаю не так? Может быть, есть лучший подход для реализации таких форм с "двойным доступом"?