2016-07-26 2 views
0

J'ai un message flash qui est généré par une réponse ajax. Dans mon contrôleur j'ai:Rails, supprimer le message flash généré via ajax

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

qui appelle un fichier destroy.js.erb

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

qui rend une partie qui montre les messages flash. Ce partiel ressemble à ceci:

#flash_messages 
    -flash.each do |key, value| 
    = content_tag(:div, value, class: "flash alert alert-#{key}") 

Je voudrais utiliser jquery pour supprimer le message flash après 2 secondes. Ce que j'ai essayé était:

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

qui, cependant, ne trouve pas la classe .alert car elle est générée après la charge de page. Qu'est-ce qu'une solution de contournement de ce problème:? Je vous remercie!

+0

Vous pouvez écrire le code Jquery dans le fichier 'destroy.js.erb'. Et puis ça va marcher. Jquery code que vous devez ajouter après $ ('# flash_messages'). Html ("' line of course.) Avez-vous essayé ceci? –

+0

Cela a fait l'affaire, ajoutez-le comme une réponse pour que je puisse le marquer comme Accepté. ! –

+0

Il existe d'autres moyens d'exécuter votre code: comme exécuter le code à la fin de l'Ajax, à partir du callback '' succès ''. comme ça va fonctionner. –

Répondre

-1

Votre JS a été chargé dans la page lorsque le DOM réel, comme le <div class='alert'.. n'était pas là. Donc, la liaison n'a pas eu lieu. Pour résoudre ce problème, placez le code JS dans le fichier destory.js.erb, après la logique de rendu du fichier. Une autre façon consiste à exécuter le code JS à partir de l'appel de rappel success de l'appel Ajax pour l'élément particulier.