2011-06-20 20 views
6

Próbuję wywołać wywołanie zwrotne ajax: success dla zdalnego łącza. Jestem na Railsach 3.0.8 i jquery-rails 1.0.11. Uruchomiłem generator jquery, aby zainstalować javascripts. Zarówno jquery, jak i jquery_ujs są zawarte w moich ustawieniach domyślnych i mogę zweryfikować, czy są one zawarte na stronie.Railsy wywołania jQuery UJS nie wyzwalające

Oto mój javascript:

jQuery(function($) { 
    $("#deactivate") 
    .bind("ajax:success", function() { 
     alert("HELLO"); 
    }) 
    .bind("ajax:error", function() { 
     alert("GOODBYE"); 
    } 
); 
}); 

Link:

= link_to 'Deactivate', activate_patient_path(patient), :id => 'deactivate', :class => "button button-red", :remote => true 

Akcja Aktywacja:

def activate 
    patient = Patient.find(params[:id]) 
    patient.do_not_call = !patient.do_not_call 
    if patient.save 
     render :nothing => true 
    else 
     render :status => 500, :nothing => true 
    end 
end 

ajax połączeń wydaje się być w porządku pracy. Akcja jest uruchamiana i widzę zmiany w bazie danych. Jednak wywołania ajaxowe nie są wywoływane. Nie mogę sprawić, żeby któryś z nich zadziałał. Mogę sprawić, aby inne wydarzenia, takie jak kliknięcie, działały idealnie.

Jeśli debugować rails_ujs w Firebug widzę, że następujący kod pobiera wybiegł z bloku Rails Ajax:

success: function(data, status, xhr) { 
    element.trigger('ajax:success', [data, status, xhr]); 
} 

Jestem zakłopotany. Jakieś pomysły?

+1

Jeśli wykonam element = $ ("# activate"); element.trigger ("ajax: sukces"); w konsoli Mogę uzyskać wywołanie zwrotne, które wyzwoli. Z jakiegoś powodu po prostu nie działa z UJS. – anthonator

+0

Korzystanie z Firebug, jeśli wstawię punkt przerwania w linii element.trigger ('ajax: success', [data, status, xhr]) w linii rails_ujs, a następnie bind $ ("# deactivate") do ajax: powodzenie po zatrzymaniu wywołania zwrotnego uruchomi się. Oddzwanianie będzie działało poprawnie, gdy kliknę link, dopóki nie odświeżę strony. Wygląda na to, że $ ("# deaktywuj") nie jest tym samym odniesieniem do elementu, na którym uruchamiany jest wyzwalacz. – anthonator

Odpowiedz

12

upewnij się, że nie włączasz jquery.js ponownie po rails.js ... Wystąpił podobny problem, w którym plik jquery.js został dołączony dwa razy, a plik rails.js został zawarty między.

+1

To było to. jQuery Tools osadzał starszą wersję jQuery. – anthonator