当数组中的元素发生变化时,启动实时计数器?

时间:2014-03-24 15:37:53

标签: jquery ruby ruby-on-rails-3

我有来自API的数据Feed,它返回一个包含“name”,“call status”和“time”字段的数组数组:

[["alex", "wrap", "1395673193"], ["bill", "call", "1395673370"], ["chelsea", "wait", "1395673363"], ["david", "wait", "1395673374"], ["kirsty", "call", "1395673340"], ["natalie", "wait", "1395673360"], ["rose", "wait", "1395673374"], ["shirley", "wait", "1395673378"], ["stuart", "call", "1395673101"], ["wendy", "call", "1395673352"]]

时间是Uxix的时间戳,但我认为我现在不需要它。

我在视图中显示它们,每秒都会刷新jQuery:

<% @ta.each do |elem| %> 
 <td><%  elem.each_slice(3) do |a,b,c| %></td>
 <td><%=  a %></td>
 <td><%=  b %></td>
 <td><%=  c %></td>
<% end %>
<% end %>

我想要做的是显示一个像秒表一样的实时计数器,它会在每次b更改时重置,但我无法弄清楚如何触发时钟启动。

我尝试将以下内容添加到我的视图中,每秒都会被jQuery刷新:

 <td><%  elem.each_slice(3) do |a,b,c| %></td>
 <td><%=  a %></td>
 <td><%=  b %></td>
 <td><%= (b == @timecheck ? "0" : "1" ) %></td>
 <% @timecheck = b %>
<% end %>

逻辑是“1”应该出现,然后在下一次迭代时返回“0”,这意味着我可以将它用作触发器。但这不起作用,因为它保留了前一个代理的值,而不是前一个循环中的同一个代理,如果你得到我的话。

我怀疑我在视图中做得太多了,逻辑应该在控制器中,但是一旦它工作就可以移动它。现在它只是我正在尝试的混搭。

我想我可能会把这一切都弄错,但我对这一切都很陌生。

1 个答案:

答案 0 :(得分:0)

几天后,我终于明白了!只是为了帮助别人,这就是我做到的。它只是将状态存储在每个循环的相反数组中,因此它可以将一个循环与另一个循环进行比较,以查看是否存在更改。

count = 0
@changeodd = Hash.new
@changeeven = Hash.new
@time = Hash.new
loop do
  count = count + 1
  a = Agentfeed.get("http://myAPI/ajax.php?token=""#{@token}""&method=agents&action=read")
  b = a["list"]
  @feedarray = []
     b.each do |feed|

     name = feed["name"]
     status = feed["status"]

  if count.odd?
     @changeodd[name] = status
     if @changeeven[name] == status
        @time[name] = @time[name] + 1
     else
    @time[name] = 1
     end
   else
     @changeeven[name] = status
     if @changeodd[name] == status
    @time[name] = @time[name] + 1
     else
    @time[name] = 1
     end
   end


@feed = []
@feed << name << status << @time[name]
@feedarray << @feed

end