Jquery 如何在使用ajax的嵌套rails模型中处理后台任务时显示动画微调器

Jquery 如何在使用ajax的嵌套rails模型中处理后台任务时显示动画微调器,jquery,ruby-on-rails,ajax,delayed-job,Jquery,Ruby On Rails,Ajax,Delayed Job,我的具体示例非常复杂,因此我将使用Railscasts的Ryan所展示的示例来讨论这一点: 背景 我有一个表格,比如“调查”,其中包含任意数量的“问题” 塞纳里奥 给我在“编辑调查”页面 我想在每个“问题”字段中添加一个按钮,该按钮调用一个远程函数,该函数反过来排队等待一个延迟的任务,以对“问题”执行一些处理 为了向用户提供反馈,我想禁用该按钮,并显示一个动画微调器,该微调器将一直保留,直到延迟的_作业处理完“问题” 提示-我可以向“问题”模型添加方法,以指示延迟的作业的状态 因此,考虑到最佳

我的具体示例非常复杂,因此我将使用Railscasts的Ryan所展示的示例来讨论这一点:

背景

我有一个表格,比如“调查”,其中包含任意数量的“问题”

塞纳里奥

给我在“编辑调查”页面

我想在每个“问题”字段中添加一个按钮,该按钮调用一个远程函数,该函数反过来排队等待一个延迟的任务,以对“问题”执行一些处理

为了向用户提供反馈,我想禁用该按钮,并显示一个动画微调器,该微调器将一直保留,直到延迟的_作业处理完“问题”

提示-我可以向“问题”模型添加方法,以指示延迟的作业的状态


因此,考虑到最佳实践,实现这一点的最佳方法是什么?

使用jQuery,您应该能够使用回调打开和关闭throbber(是的……这是“官方”名称)

或者,如果它更复杂,我以前用过:


使用jQuery,您应该能够使用回调打开和关闭throbber(是的……这是“官方”名称)

或者,如果它更复杂,我以前用过:


首先,您需要一个动画微调器图形。谷歌,有很多网站会为你生成它们

在布局(或视图)中使用以下内容引用gif:


首先,您需要一个动画微调器图形。谷歌,有很多网站会为你生成它们

在布局(或视图)中使用以下内容引用gif:


简单。

  • 创建一个隐藏元素来显示我们的图像
  • 使用CSS格式化布局
  • 使用Javascript打开/关闭效果
  • 将html放入页面模板中

    //hidden div that has spinner image
    <div id="LoadingDiv" style="display:none;">
            <img src="ajax-loader.gif" alt="" /></div>
    
    然后根据需要打开和关闭它

    var ldiv = document.getElementById('LoadingDiv');
    ldiv.style.display='block';
    /*Do your ajax calls, sorting or laoding, etc.*/
    ldiv.style.display = 'none';
    
    如果您想了解更多细节,或者需要使用半透明像素,请参阅我的全文


    简单。

  • 创建一个隐藏元素来显示我们的图像
  • 使用CSS格式化布局
  • 使用Javascript打开/关闭效果
  • 将html放入页面模板中

    //hidden div that has spinner image
    <div id="LoadingDiv" style="display:none;">
            <img src="ajax-loader.gif" alt="" /></div>
    
    然后根据需要打开和关闭它

    var ldiv = document.getElementById('LoadingDiv');
    ldiv.style.display='block';
    /*Do your ajax calls, sorting or laoding, etc.*/
    ldiv.style.display = 'none';
    
    如果您想了解更多细节,或者需要使用半透明像素,请参阅我的全文


    执行轮询并使用类似于以下内容的json进行响应:

    {"finished": [1,3,3]}
    
    然后添加轮询JavaScript

      var interval = setInterval(function() {
        $.get("test.json", function(data) {
          for(i in data.finished) {
            //Hide spinner with id = data.finished[i]
          }
        })
      }, 5000) //Time in milliseconds
    

    执行轮询并使用类似于以下内容的json进行响应:

    {"finished": [1,3,3]}
    
    然后添加轮询JavaScript

      var interval = setInterval(function() {
        $.get("test.json", function(data) {
          for(i in data.finished) {
            //Hide spinner with id = data.finished[i]
          }
        })
      }, 5000) //Time in milliseconds
    

    不过,显示微调器并不是真正的挑战,问题在于远程函数调用只是设置延迟的_作业,它将由延迟的_作业进程执行。我需要的是某种观察器函数,它反复轮询服务器以确定作业是否已完成,如果已完成,我需要隐藏与该作业关联的特定微调器。显示微调器并不是真正的挑战,但问题是远程函数调用只是设置延迟的\u作业,将由延迟的作业流程执行。我需要的是某种观察器函数,它反复轮询服务器,以确定作业是否已完成,如果已完成,我需要隐藏与该作业关联的特定微调器。