我有这两行内容,每当进行分析时,都会添加一个小图标作为警告:
- if document.analyses.processing.any?
%i.dashboard__icon.fa.fa-refresh.text-warning{ aria: { hidden: 'true', title: 'Processing' } }
并在此过程完成后添加了另一个图标%i.dashboard__icon.fa.fa-circle.text-info
而不是当前的%i.dashboard__icon.fa.fa-refresh.text-warning
,我在else
中添加了它:
- if document.analyses.processing.any?
%i.dashboard__icon.fa.fa-refresh.text-warning{ aria: { hidden: 'true', title: 'Processing' } }
- else
%i.dashboard__icon.fa.fa-circle.text-info{ aria: { hidden: 'true', title: 'Processed' } }
但是问题是,在此之后,每个完成分析的分析都添加了此fa-circle.text-info
。我只想在完成后将其添加到最后一个。
我可以异步实现这种功能,还是应该每20秒左右重新加载一次页面,并检查此过程是否已完成以将图标更改为fa-circle.text-info
?
没有更多信息,我能做的最好的事情如下所示:
向控制器添加操作:
def refresh_icons
...set some instance variable...
respond_to do
format.js
end
end
然后添加一条路线:
resource :something do
get 'refresh_icons', on: :member
end
在您的JavaScript中添加:
$('document').ready(function() {
setInterval(function(){
$.ajax({
type: 'GET'
url: 'refresh_icons'
dataType: 'script'
})
}, 20000);
}
将您图标的所有逻辑放入可以在原始视图中呈现的_icons.html.haml部分中,然后添加一个更新视图的视图refresh_icons.js.erb:
$('#dashboard_icons').html('<%= j render partial: 'a_controller/icons' %>');