【问题标题】:Sending changing params through periodically_call_remote通过periodic_call_remote 发送变化的参数
【发布时间】:2011-06-28 20:44:43
【问题描述】:

我正在使用periodically_call_remote 更新包含对象列表的页面部分。我与 url 一起发送了一个参数,其中包含数据库中最新对象的 created_at 日期。被调用的动作然后获取自那时以来已创建的所有对象,并呈现一个将它们显示在列表顶部的部分。

问题是我似乎无法弄清楚如何做到这一点,以便下次periodically_call_remote 触发时,它会为新的最近对象(如果有的话)发送 created_at 日期。我尝试将periodically_call_remote 放在正在渲染的部分中,但这会导致各种问题(This 解释了为什么你不应该这样做)。

有什么方法可以让periodically_call_remote 每次被调用时都发送一个新参数?就目前而言,它只是一遍又一遍地发送同一个对象,这意味着新对象会被多次渲染。

【问题讨论】:

    标签: ruby-on-rails ruby ajax


    【解决方案1】:

    你说黑客? :)

    将参数存储在隐藏的 div 中。您可以通过 Javascript 访问该 div 的内容,这将作为 :with 选项的一部分接受。

    当参数更改时,只需将隐藏 div 的内容更新为控制器操作的一部分。

    所以,例如..

    <div id="date_to_check_from" style="display:none;"><%= @initial_created_at %></div>
    
    <%= periodically_call_remote :url => path_to_controller(@normal_params), :with => "'date_to_check_from=' + $('#date_to_check_from').html()", :method => :get, :frequency => 10 %>
    

    这将使您在控制器中获得 params[:date_to_check_from] 。然后随心所欲地更新,例如,

    render :update do |page|
       page << "$('#date_to_check_from').html('#{@new_date_to_check_from}');
    end
    

    【讨论】:

      【解决方案2】:

      可以做一些骇客,但我建议您开始考虑编写自己的 JavaScript 代码来执行 AJAX 请求。像 periodically_call_remote 这样的 Rails 助手不适合用于如此复杂的情况。

      【讨论】:

      • 我担心可能是这样。我想现在是我学习编写自己的 AJAX 的时候了。
      猜你喜欢
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 2013-06-21
      • 2018-11-24
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      • 2019-10-05
      相关资源
      最近更新 更多