2016-07-26 17 views
0

Ich habe eine Flash-Nachricht, die durch eine Ajax-Antwort generiert wird. In meinem Controller habe ich:Schienen, entfernen Flash-Nachricht generiert über Ajax

def destroy 
    flash[:danger] = "Successfuly destroyed" 
    format.js 
end 

, die eine destroy.js.erb-Datei aufruft

$('#flash_messages').html("<%= escape_javascript (render partial: 'layouts/flash_messages') %>"); 

, die eine teilweise macht das die Flash-Mitteilungen zeigt. Diese Teilansicht sieht folgendermaßen aus:

Ich möchte jquery verwenden, um die Flash-Nachricht nach 2 Sekunden zu entfernen. Was ich versucht war:

$(".alert").fadeTo(2000, 500).slideUp(500, function(){ 
    $(".alert").alert('close'); 
}); 

, die jedoch nicht die gewünschte .alert Klasse, weil es nach dem Laden der Seite erzeugt wird. Was ist eine Problemumgehung dieses Problems? Vielen Dank!

+0

Sie können den Jquery-Code in die Datei 'destroy.js.erb' schreiben. Und dann wird es funktionieren. Jquery Code muss nach '$ ('# flash_messages') hinzugefügt werden. Html (" 'line ofcourse. Haben Sie das versucht? –

+0

Das hat den Trick gemacht. Fügen Sie es als Antwort hinzu, damit ich es als Akzeptiert markieren kann. Danke ! –

+0

gibt es auch eine andere Möglichkeit, den Code auszuführen, wie das Ausführen des Codes, wenn Ajax abgeschlossen ist, vom 'Erfolg'-Callback aus. In diesem Fall müssen Sie das JS nicht innerhalb der destroy.js.erb platzieren So wird es funktionieren. –

Antwort

-1

Ihr JS wurde in die Seite geladen, als das eigentliche DOM, wie die <div class='alert'.. nicht da war. Also, die Bindung ist nicht passiert. 1 Möglichkeit, dies zu lösen, setzen Sie den JS-Code in die Datei destory.js.erb, nach der Datei Rendering-Logik. Eine andere Möglichkeit besteht darin, den JS-Code aus dem Callback des Ajax-Aufrufs success für das bestimmte Element auszuführen.