Rails Progress Работа с coffeescript

1

Я нашел эту жемчужину, чтобы использовать индикатор выполнения бутстрапа и задержанную работу. В своем примере он использует файл.haml, но я использую erb и coffeescript в своем проекте, поэтому я попытался воспроизвести то, что он делает.

Это мой контроллер

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

это route.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 идентификатор задания, которое я создал в своем действии контроллера? Спасибо вам всем

[РЕДАКТИРОВАТЬ]

Это моя работа

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 моей работы никогда не уволен (я помещаю puts 'lol' в мой метод выполнения, и я никогда не вижу его в консоли)

Теги:
bootstrap-4
progress-bar
coffeescript

2 ответа

1

interval = setInterval (-> 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,

надеюсь, это поможет вам!

0

Это проблема с клиентской стороной и сервером.

Вы должны будете поместить идентификатор задания в атрибут data- в теге html во время рендеринга на стороне сервера. Он должен быть в переменной @job на основе действия вашего контроллера.

После того, как ваша страница отображается, и вы находитесь в коде coffeescript (теперь клиентская сторона). Вы можете разобрать этот атрибут и использовать его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню