2016-07-26 3 views
0

У меня есть флеш-сообщение, которое генерируется с помощью ответа ajax. В моем контроллере у меня есть:Рельсы, удалите флеш-сообщение, сгенерированное с помощью ajax

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

который называет destroy.js.erb файл

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

, что делает частичным, которая показывает быстрые сообщения. Это частичное выглядит так:

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

Я бы хотел использовать jquery для удаления флеш-сообщения через 2 секунды. То, что я попытался было:

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

, которые, однако, не находит .alert класс, потому что он генерируется после загрузки страницы. Что такое обходной путь этой проблемы:? Спасибо!

+0

Вы можете написать код JQuery в файле 'destroy.js.erb'. И тогда это сработает. Код JQuery, который нужно добавить после '$ ('# flash_messages'). Html (« 'line of the course. Вы попробовали это? –

+0

Это сделал трюк. Добавьте его в качестве ответа, чтобы я мог отметить его как Accepted. ! –

+0

Существует и другой способ выполнения вашего кода. Как и выполнение кода, когда Ajax завершает, от обратного вызова «success». В этом случае вам не нужно помещать JS в файл destroy.js.erb. так оно и будет работать. –

ответ

-1

Ваш JS был загружен на страницу, когда фактического DOM, например, <div class='alert'.. не было. Итак, привязки не произошло. 1 способ решить эту проблему, поставить JS-код в файл destory.js.erb после логики визуализации файлов. Другим способом является выполнение JS-кода из вызова success вызова Ajax для конкретного элемента.