【问题标题】:Rails Progress Job with coffeescript使用咖啡脚本的 Rails 进度作业
【发布时间】:2017-09-27 15:19:32
【问题描述】:

我找到this 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>

这是我的 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)

当我点击链接时代码运行正确,唯一的问题是,我如何告诉我的咖啡脚本我在控制器操作中创建的作业的 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',但我从未在控制台中看到它)

【问题讨论】:

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


    【解决方案1】:

    间隔 = setInterval(-> var paramJob = ''; // 获取@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,

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      这是客户端与服务器端的问题。

      在服务器端渲染期间,您必须将作业 ID 放在 html 标记上的 data-attribute 中。根据您的控制器操作,它应该位于 @job 变量中。

      一旦您的页面被渲染并且您处于咖啡脚本代码中(现在是客户端)。 You can parse this attribute out and utilize it.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多