2013-07-02 35 views
0

我試圖在我的應用中實現一些Ajax。一個奇怪的行爲發生! 這是一個日託應用程序。當您顯示特定日期的特定日託時,您可以添加一些孩子。 最初會生成數據庫的子項列表,當您點擊其中一個頁面時,頁面重新加載和新的孩子出現在日託的考勤列表中。它工作正常,我只是想添加一些Ajax來更友好!Rails 3的每種方法和Ajax

當您點擊孩子將他添加到託兒所時,會創建一個daycare_item(連接表,小孩的ID和託兒所的ID)。

我做出改變,使其阿賈克斯準備:

  • 局部的名單
  • format.js在daycare_item控制器
  • 遠程真正的鏈接。

它的作品,沒有更多的重新加載!但是,只有當您再次單擊兒童列表時纔會更新列表(添加的最後一個孩子尚未出現)。 js事務可以工作,如果手動刷新頁面,則顯示缺少的子項。

我嘗試一些東西,這裏是我的結果:

在我的部分有

<% @daycare.daycare_items.each do |c| %> 
    <li><%= c.child.firstname ></li> 
<% end %> 

這產生一個孩子誰沒有顯示(直到完全刷新)的「滯後」效應

但是,如果我把一個

<%= @daycare.daycare_items.count %> 

代碼更新的時間 ! 我在日誌中看不到什麼奇怪的東西。 我在問爲什麼.each方法有所作爲?

+0

我想知道daycare.daycare_items.count是否會以daycare.daycare_items集合被刷新的方式觸及或查詢數據庫? –

+0

這裏是在列表中兩個成功clics後的日誌:http://pastebin.com/X2ZzY1jC我沒有看到來自count動作的查詢。在此操作之後,計數爲2,並且只有列表中的子項纔會刷新頁面,然後列出兩個名稱。 (enfant_id是法文,數據庫的一部分是法文,我正在盡我所能翻譯幾欄!)。也許我必須在控制器中仔細觀察,也許我應該和一些當地人一起玩? –

+0

我不知道它是否與您的問題有關,但請注意* .bind *和* .live *之間的區別(如果您使用jQuery,則不適用)。 – Fernando

回答

0

var正在停止要執行的代碼的一部分,var沒有錯誤並且不會生成錯誤。

涉及的元素: daycare_items控制器

def create 
    @daycare = Daycare.find(params[:daycare_id]) # for Ajax 
    @daycare_item = DaycareItem.new(params[:daycare_item]) 
.... 
end 

的create.js.erb

$('#children-list').html(" <%=j render partial: 'daycares/daycare', locals: { daycare: @daycare } %> "); 

視圖日託#表明

<div id="children-list"> 
    <%= render @daycare %> 
</div> 

部分(的一部分) _daycare.html.erb

<p>counting test:<%= daycare.daycare_items.count %></p> 

# here was something like this <%= @waiting.count %> @waiting is define in the daycare controller but not in the daycare_items controller 
<p> 
    <% daycare.daycare_items.each do |dci| %> 
    <%= dci.enfant.prenom %> 
    <% end %> 
</p> 
+0

答案應該是答案,而不是對問題的提及。把答案放在你的答案中。 –

+0

答案現在是在正確的地方。 –