我发现this gem可以同时使用引导进度条和延迟的工作gem。在他的示例中,他使用.haml文件,但是我在项目中使用了erb和coffeescript,因此我尝试重现他的工作。

这是我的控制器

def export
    @job = Delayed::Job.enqueue StandingsJob.new
end


这是routes.rb

get 'export', to: 'scraper#export'


这是我的home.erb.html

<%= link_to 'export', export_path, {id:'mario', remote: true} %>

<div class="progress">
  <div class="progress-bar progress-bar-striped active" role="progressbar"
       aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width:0%">
    0%
  </div>
</div>


这是我的coffescript文件

$(document).on "turbolinks:load", ->
    $('#mario').on 'click', ->
      alert('hocliccatoooo')
      interval = setInterval( ->
        $.ajax(
          url: '/progress-job/' **** What should I add here?????****,
          success: (job) ->
            console.log('loool')
            stage
            progress
            if job.last_error != null
              $('.progress-status').addClass('text-danger').text(job.progress_stage);
              $('.progress-bar').addClass('progress-bar-danger');
              $('.progress').removeClass('active');
              clearInterval(interval);

            if job.progress_stage != null
                stage = job.progress_stage
                progress = job.progress_current / job.progress_max * 100
            else
              progress = 0
              stage = 'Uploading file?'

            if progress != 0
              $('.progress-bar').css('width', progress + '%').text(progress + '%')
            $('.progress-status').text(stage);
          error: ->
            alert('errore')
            $('.progress').removeClass('active');
            $('.progress-bar').css('width', '100%').text('100%');
            $('.progress-status').text('Finito!!!');
            clearInterval(interval);

        )
      , 100)


当我单击链接时,代码可以正确运行,唯一的问题是,如何将我在控制器操作中创建的作业的ID告诉我的coffeescript?
谢谢你们

[编辑]

这是我的工作

class StandingsJob < ProgressJob::Base

  def perform
    update_stage 'Faccio cose'
    update_progress_max 10
    for i in [0..10]
      sleep(2)
      update_progress
    end
  end
end


我做了一些挖掘工作,似乎永远不会解雇我的perfom方法(我在Perform方法中放了一个put“ lol”,但在控制台中却从未看到过)

最佳答案

间隔= setInterval(->
   var paramJob =''; //获取@job参数->

//使用字符串“&” +“ quot;”代替SYM

var jobObj = JSON.parse(('{'+ paramJob.slice(paramJob.indexOf(“ SYMid”),paramJob.length))。replace(/ SYM / g,'“'))); //已处理参数

//在ajax中使用jobObj.id
网址:“ / progress-job /” + jobObj.id,

希望这可以帮到你!

关于javascript - Rails Progress Job与Coffeescript,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46451598/

10-11 06:07