2013-04-01 94 views
3

我有一個頁面上有兩個Ajax請求(一個顯示日期,一個顯示日曆)多個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' 

編輯 - 鏈接到阿賈克斯行動

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

謝謝!

回答

4

您要麼必須根據傳遞的某些參數設置不同的響應邏輯,要麼需要將其分解爲兩種不同的操作,因爲它們實際上是兩種不同的操作。

所以像這樣的東西,如果你使用參數的方法。

-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("<%= escape_javascript(render('layouts/today')) %>");

update_calendar.js.erb

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

+0

我如何打破他們分成兩個行動? –

+0

在您的控制器update_today和update_calendar中創建方法,並讓它們各自爲其中一個更新執行邏輯。 – rovermicrover

+0

你認爲你可以詳細說明嗎?我是一個總新手。 –