0

我有一个由浏览器调用的“长”任务。我想做的是创建一个动态进度条,在同一页面或灯箱中显示“幕后”任务的进度(不刷新页面)。

我的想法是使用这样的 JQuery 栏:http: //docs.jquery.com/UI/API/1.8/Progressbar

我的问题是:

如何从任务(在 lib/ 中)调用 JQuery(或一般视图)来更新栏?

仅供参考,我也使用 ActiveAdmin,这不仅仅是问题,因为它使用预编译视图。

4

2 回答 2

3

我会在控制器中创建一个新的 REST 操作(或理想情况下重用现有的操作)来为进度条提供信息。

而且我还会尝试每隔一段时间使用 JQuery 使用 Ajax 调用控制器。

我认为这种面对进度条实现的方式比从 lib 任务中调用视图更好。

像这样的东西:

$(function() {
  setInterval(updateProgressBar, 1000);
});
function updateProgressBar() {
  //Invoke controller with ajax, and update progressBar
}

如果您不喜欢在客户端玩轮询,您可能会在 HTML5 中找到有趣的服务器事件。

于 2012-12-03T08:24:51.363 回答
0

这是不久前的帖子,但如果它对某人有帮助,那么有一个宝石可以做到这一点。它似乎不再被维护,但它是如何实现所请求行为的一个很好的例子:

https://github.com/d4be4st/progress_job

于 2018-08-24T09:30:52.313 回答