У меня есть форма Rails 3 AJAX в диалоговом окне SimpleModal , которое добавляет строку в таблицу при каждой отправке. Я использую ненавязчивый подход jquery-ujs. Пока что:
Форма AJAX работает любое количество раз, если ее нет в диалоговом окне.
Работает ровно один раз, если находится в диалоговом окне SimpleModal. После этого кнопка отправки перестает работать. Нет отправки, нет ошибок, нет ничего, хотя он работает нормально при отправке вручную с консоли js, т.е. $ ('...'). Submit ();
Чувствуется, что обработчик событий отбрасывается, когда SimpleModal перемещает html в диалоговое окно, но все в источнике jquery-ujs выглядит как метод .delegate (), поэтому я не знаю почему он не будет прикреплен.
Я подозреваю, что есть очень простое решение, которое я просто не знаю, которое решает проблему примерно в двадцати символах.
Вот соответствующий код:
Страница js (app / assets / javascripts / binders.js):
$(function() {
// Hide the form initially:
$('#add_binder_modal').hide();
// Show as SimpleModal when add link clicked:
$('#add_binder_link').click(function(event) {
event.preventDefault();
$('#add_binder_modal').modal();
});
// Close on success:
$("form").bind("ajax:success", function(xhr, data, status){
$.modal.close();
});
});
Вот моя форма Rails (app / views / binders / _form.js):
#add_binder_modal.container
= form_for Binder.new, :remote=>true do |f|
= f.text_field :subject
= f.submit
Не думаю, что вам это понадобится, но на всякий случай вот контроллер (app / controllers / binders_controller.rb):
class BindersController < ApplicationController
respond_to :html, :js
def create
@binder = Binder.new(params[:binder])
@binder.save
respond_to do |format|
format.html { redirect_to binders_path }
format.js
end
end
end
И наконец, js, на который он отвечает (app / views / binders / create.js.erb):
$('<%= escape_javascript(render(:partial => 'show', :locals=>{:binder=>@binder}))%>')
.appendTo('.binders .atable tbody').hide().fadeIn();