更新div stateman改变对象的状态

时间:2016-02-18 20:40:20

标签: jquery ruby-on-rails ruby ajax states

我希望在转换更改对象时更新div

所以我在视图中呈现了渲染的对象:

<% things.each do |order| %>
  <div class='current_state' data-id="<%= thing.id %>">
  <% thing.state %>
<% end %>

我希望在更改时更新things.state。这些更改通过应用程序(ruby)中的不同逻辑发生,使用statesman

我知道ajax的基础知识,我不知道这是否可行。 到现在为止,我已经完成了:

  • 我有一个jquery代码,它获取我渲染的元素数量,并在for bucle中获取每个元素的id,执行ajax调用:

    function updateStatus() {
    var many_things = $("div[class*='current_state']").length;
    
    for (i=0; i<many_things-1; i++) {
    var thing_id = $('.current_state')[i].attributes['data-id'].value;
    $.ajax({
    url: '/things/update_status',
    data: { thing_id: thing_id }
     });
    
    setTimeout(updateStatus(), 10000);
    }
    

    如您所见,我想做一个轮询请求以更新div

  • 我在控制器中使用id获取params,因此我可以找到该对象。 @thing,并获取该对象的当前状态。

在我的部分内容中,我发送了@thing,但收到的内容为nil或尚未收到。 如果我在局部中放置一些文本正在视图中工作。 类似的东西:

<%= p 'something' if !@thing %>

从这里开始,我不知道如何获取每个状态属性并将其打印在每个属性的正确对象中。

我认为另一种选择是从after_transition的{​​{1}}回调发起呼叫。但我不知道这是否可能。

我希望在解释这个问题时能够清楚明白。 谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

首先,使用<%=代替<% 输出您的州,然后关闭<div>

<% things.each do |order| %>
  <div class='current_state' data-id="<%= thing.id %>">
    <%= thing.state %>
  </div>
<% end %>

其次,things来自哪里? @thing最终在哪里?他们两个不同的变量。我猜你想把它称为@things,并在控制器中设置它。

第三,你的ajax调用实际上必须做一些success设置。您正在提出请求,但响应无处不在。请参阅http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings

$.ajax({
  url: '/things/update_status',
  data: { thing_id: thing_id },
  success: function(data, etc) { change_the_page(); },
});

NB。完成事情是/things/update_status PATCHPUT请求,而不是GET(ajax默认值),如果它实际上发生了变化。您需要在config/routes.rb中修复此问题。

仅供参考,在<%= p 'something' if !@thing %>中,=会将something输出到浏览器p会输出"something"终端