javascript - 使用 coffeescript 的 Rails 进度作业

标签 javascript ruby-on-rails coffeescript progress-bar bootstrap-4

我找到了 this gem一起使用 Bootstrap 进度条和延迟作业 gem。在他的例子中,他使用了 .haml 文件,但我在我的项目中使用了 erb 和 coffeescript,所以我试图重现他所做的。

这是我的 Controller

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>

这是我的coffeescript文件

$(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)

当我点击链接时,代码运行正确,唯一的问题是,我如何告诉我的 coffeescript 我在 Controller 操作中创建的作业的 ID? 谢谢大家

[编辑]

这是我的工作

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 方法中放了一个 puts 'lol' 但我从未在控制台中看到它)

最佳答案

间隔 = 设置间隔( -> var paramJob = '<%=@job.to_json%>';//获取@job 参数 ->

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

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

//在ajax中使用jobObj.id url: '/progress-job/' + jobObj.id,

希望对您有所帮助!

关于javascript - 使用 coffeescript 的 Rails 进度作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46451598/

相关文章:

javascript - 可以使用 jQuery 在另一个元素之前选择一个元素吗?

javascript - Chrome Javascript 控制台默认为错误的上下文

javascript - 在我单击图像的位置创建一个带有文本的 div

ruby-on-rails - Rails 应用程序中没有 tmp/restart.txt 文件

json - CoffeeScript 中的 package.json 和 bower.json?

javascript - 迭代数组并找到一系列数字之间的总和

ruby-on-rails - Rails : Thread. 请求范围数据共享的当前哈希

ruby-on-rails - Ransack 搜索日期作为字符串

coffeescript - 使用 docco/markdown 命名部分?

javascript - 如何选择coffescript到JS的编码?