[Rails6] 5초 간격으로 브라우저 다시 로드 +α

절차.

  • 자동 업데이트를 위한 Javascript
  • 준비
  • 자동으로 업데이트하려는view를 통해 읽기
  • 이 기사들밖에 없어요.

    방법: 자동 업데이트를 위한 Javascript 준비


    다음 Javascript를 준비하십시오.
    app/javascript/packs/autoreload.js
    const interval = setInterval('location.reload()', 5000)
    $(document).on('turbolinks:before-cache turbolinks:before-render', () => clearTimeout(interval))
    

    방법: 자동으로 업데이트하려는view로 읽기


    app/views/**/*.erb.html
    <%= javascript_pack_tag 'autoreload' %>
    
    그게 다야.
    그렇긴 한데, "역시 리로드가 없네..."이런 분들은 아래의 응용편을 보세요.

    응용 프로그램

  • controller에서 대응) 이외의format(ajax 요청에 대응)

  • 부분 커팅*.html.erb의 일부
  • *.js.erb

  • 다시 쓰기autoreload.js
  • 방법: controller에 대응하는 것 이외의format(ajax 요구에 대응하는)


    app/controllers/**/*_controller.rb
    ...
    def index
      ...
      @records = Record.all
      respond_to do |format|
        format.js
        format.html
      end
    end
    ...
    

    방법: *.html.erb의 일부분을 부분적으로 잘라내다


    app/views/**/index.html.erb
    <div id="records">
      <%= render 'record' %>
    </div>
    
    app/views/**/_record.html.erb
    <%= record.name %>
    

    방법: *.js.준비


    app/views/**/index.js.erb
    $("#records").empty();
    $("#records").append("<%= escape_javascript(render @records) %>");
    

    방법덮어쓰기 js


    app/javascript/packs/autoreload.js
    const milliseconds = 5000
    const sync = () => {
      $.ajax({
        type: 'GET',
        url: $(location).attr('href'),
        dataType: 'script'
      })
    }
    const interval = setInterval(sync, milliseconds)
    $(document).on('turbolinks:before-cache turbolinks:before-render', () => clearTimeout(interval))
    

    좋은 웹페이지 즐겨찾기