Rails自动单击按钮刷新div

时间:2016-01-28 19:11:29

标签: javascript jquery ruby-on-rails ajax

我在构建应用程序时自学编程和自学Rails。

我有一个包含作业列表的页面。每个作业都通过一个作业部分呈现,该部分具有一个div,通过"更新状态"带ajax的按钮。 该按钮按预期工作,并在单击时刷新每个作业的状态。

我现在尝试每隔x秒使状态div自动刷新一次。 在尝试了不同的方法之后,我实现了一个javascript,只需定期刷新按钮(如果需要,我可以稍后隐藏)。这是由@ de_an777:Rails 3 - Periodic Refresh of DIV建议的。

这似乎对我有用。 问题是它没有刷新列表中的所有作业。因此,如果列表中有2个作业,我会在服务器日志中看到两个刷新操作,但它们都只刷新第一个作业。 检查浏览器检查器中每个按钮元素的作业ID时,它们似乎都通过作业[:id]具有正确的ID。

我几天来一直在努力改变我的路线和方法,但却无法使其发挥作用。希望有人能以正确的方式指导我...

Jobs_controller.rb:

 def update
    @job = Job.find(params[:id])
        #some updating logic
        respond_to do |format|          
            format.js 
        end
  end

index.html.erb:

<div class="row">
    <aside class="col-md-4">
        <section class="user_info">
            <h1>Job List</h1>
        </section>
        <section class="job_form">
            <%= link_to "New Job", upload_path, class: "btn btn-lg btn-primary" %>
        </section>
    </aside>
</div>
&nbsp;&nbsp;
<%= render @jobs %>

_job.html.rb:

<span class="jobs">
    <p> Job ID: <%= job.id %></p>
    <p> Job Name: <%= job.name != "" ? job.name : "Untitled" %>
        <p> Source File: <%= job.source_file %></p>
        <% @job = job %>
        <div id="status_div_<%= @job.id %>">
            <%= render :partial => 'jobs/status', locals: {job: job} %>
        </div>
        <%= button_to("Update Status", jobs_update_path(id: job.id), remote: true, method: :patch, id: "refresh_#{job[:id]}") %>
    </span>
</li>

<script type="text/javascript">
  function doSomething() {
    $('#refresh_<%= job[:id] %>').click();
  }
  setInterval('doSomething()',10000);
</script>

路线:

  get 'new_job'     => 'jobs#new'
  get 'upload'      => 'jobs#upload'
  patch "jobs/update", to: "jobs#update"
  resources :jobs

update.js.erb:

$('#status_div_<%= @job.id %>').html("<%= j render :partial => 'status', object: @job, as: :job %>");

_status.html.erb:

<p> Status: <%= job[:status] %></p>

0 个答案:

没有答案