Я видел здесь много вопросов о индикаторе выполнения, но ни один из них не помогает в том, что я пытаюсь сделать. По сути, у меня есть представление и контроллер в Rails 4, где пользователь может удалять изображения, связанные с записью, а затем обновлять div изображений через jquery после удаления изображения.
Но удаление выполняется удаленно в хранилище Google через туман, что занимает пару секунд. Я просто хочу отображать индикатор выполнения или счетчик или что-то еще, пока изображение удаляется и до того, как div изображений обновится, чтобы пользователи знали, что страница не зависла. У меня все работает, кроме индикатора выполнения.
Вот что у меня есть:
#images_list
Идентификатор div, который обновляется после удаления изображения и содержит все изображения
Действия контроллера:
def delete_image
EntryImage.destroy
respond_to do |format|
format.js # js file that refreshes the images div
end
end
.js-файл
$('#images_list').html("<%=j render 'entry/display_images' %>");
Все очень просто. Но как я могу загрузить полосу вращения/прогресса, пока я жду, пока контроллер вызовет файл .js?
EntryImage.destroy
открывает соединение с туманом, переименовывает и удаляет изображение. Затем, когда он возвращается, вызывается .js
, и div обновляется.
Я уверен, что это не слишком сложно, но я новичок в jquery и т. д. В идеале я хотел бы сделать это простым способом «Railsy», используя встроенные технологии, такие как Coffeescript, jquery и даже бутстрап (так как я знаю, что где-то есть индикатор выполнения, и мы уже используем бутстрап в проекте).
Редактировать: я также должен упомянуть, что индикатор выполнения/счетчик должен быть в модальном окне в центре представления, чтобы убедиться, что пользователь видит его, даже если страница прокручивалась, потому что запись содержит много изображений. .
Спасибо
Правка 2: Извините, что публикую так много кода, но я не могу понять, почему метод, предложенный в первом ответе, не работает.
Кнопки удаления внутри #images_list
не активируют скрытый state по какой-то причине работает только первый (вне div):
<div id='images_toggle_div' style='display: none;'>
<div class='well' style='overflow: auto;'>
<a class="delete-btn" href="#">This one works!</a>
<div class='hidden' id='spinner'>
<img alt="Ajaxspinner" src="/assets/ajaxSpinner.gif" style="width: 200px;" />
</div>
<script>
$('.delete-btn').click(function(){
$('#spinner').toggleClass('hidden');
});
</script>
<div id='images_list'>
<div class='pull-left bordered'>
<a href="http://rack.supersecret.com/526-3.jpg" target="_blank"><img alt="526 3" class="small_image" src="http://rack.supersecret.com/526-3.jpg?5090659" title="526-3.jpg (314 x 450)" /></a>
<div class='tiny'>
<a href="http://www.google.com/search?q=upc 9780767880268" target="_blank">9780767880268</a>
</div>
<a class="btn btn-mini btn-danger delete-btn" data-remote="true" href="#" title="Delete this image"><i class="icon-trash icon-white icon-large"></i> Delete</a>
</div>
<div class='pull-left bordered'>
<a href="http://rack.supersecret.com/526-4.jpg" target="_blank"><img alt="526 4" class="small_image" src="http://rack.supersecret.com/526-4.jpg?5090659" title="526-4.jpg (391 x 500)" /></a>
<div class='tiny'>
<a href="http://www.google.com/search?q=upc 9780767880268" target="_blank">43396154162</a>
</div>
<a class="btn btn-mini btn-danger delete-btn" data-remote="true" href="#" title="Delete this image"><i class="icon-trash icon-white icon-large"></i> Delete</a>
</div>
</div>