【问题标题】:Multiple Ajax Requests on one Rails View一个 Rails 视图上的多个 Ajax 请求
【发布时间】:2013-03-22 02:34:00
【问题描述】:

我在一页上有两个 ajax 请求(一个显示日期,一个显示日历)

请求一:点击日期(在日历上),将更新日期。

请求二:您可以在日历的月份之间更改。

发生的情况是我在 index.js.erb 中同时拥有这两个函数,并且它总是同时执行这两个函数,每次我更改月份时都会重置“请求一个”中的日期。

我可以让它一次只执行 index.js.erb 的一个函数吗?

Index.js.erb

$("#calendar").html("<%= escape_javascript(render('layouts/calendar')) %>");
$("#today").html("<%= escape_javascript(render('layouts/today')) %>");

_today.html.erb

<div class="span3 offset2 dateToday">
    <% end %>
    <span id="currentdate">
        <%= @eventDate.strftime("%B") %><br>
        <span id="dayDate"><%= h @eventDate.day %></span>
    </span>
</div>

_calendar.html.erb

  <h2 id="month">
      <span class="pull-left"><%= link_to "<", :month => (@date.beginning_of_month-1).strftime("%Y-%m-01") %></span>
      <%= h @date.strftime("%B %Y") %>
      <span class="pull-right"><%= link_to ">", :month => (@date.end_of_month+1).strftime("%Y-%m-01") %></span>
  </h2>
  <%= calendar_for(@events, :year => @date.year, :month => @date.month) do |t| %>
      <%= t.head('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun') %>
      <%= t.day(:day_method => :eventdate) do |date, events| %>
  <div class="day">
      <%= link_to(date.day,  {:day => date }, :remote => true, :class => "btn dayBtn") %>      
  </div>
  <% end %>

编辑:routes.rb

resources :calendar

root :to => "calendar#index"

match '/faq',   to: 'calendar#faq'
match ':controller/:action'

编辑 - 链接到 ajax 操作

<%= link_to "<", :month => (@date.beginning_of_month-1).strftime("%Y-%m-01"), :action => "update_calendar", :remote => true %>

谢谢!

【问题讨论】:

    标签: javascript ruby-on-rails ajax


    【解决方案1】:

    您要么必须设置逻辑以根据传递的某些参数做出不同的响应,要么需要将它们分解为两个不同的动作,因为它们实际上是两个不同的动作。

    如果你使用 param 方法,就会出现这样的情况。

    -if param[:one]
      $("#calendar").html("<%= escape_javascript(render('layouts/calendar')) %>");
    -if param[:two]
      $("#today").html("<%= escape_javascript(render('layouts/today')) %>");
    

    或者如前所述,将它们分解为不同的动作。

    在你的控制器中

    def update_today
     #your today logic thats in your current action
     respond_to do |format|
       format.js{render}
     end
    end
    
    def update_calendar
     #your today logic thats in your current action
     respond_to do |format|
       format.js{render}
     end
    end
    

    然后您必须为这两个操作添加路由。

    update_today.js.erb

    $("#today").html("&lt;%= escape_javascript(render('layouts/today')) %&gt;");

    update_calendar.js.erb

    $("#calendar").html("&lt;%= escape_javascript(render('layouts/calendar')) %&gt;");

    【讨论】:

    • 如何将它们分成两个动作?
    • 在您的控制器 update_today 和 update_calendar 中创建方法,并让它们各自为其中一个更新执行逻辑。
    • 你认为你可以详细说明吗?我是个新手。
    • 我遇到了路由错误。当我单击“update_calendar”操作时,我想传递月份变量,但它会将其路由到 /calendar/update_calendar/2013-02-01 而不是 /calendar?month=2013-02-01。有什么想法吗?
    • 在您的问题中发布您的路线文件,以便我提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    相关资源
    最近更新 更多