2011-08-16 47 views
0

我有一個數組,我只想一次只顯示4個項目,當我點擊Next時,它將顯示下4個項目。 查看代碼:如何在rails中顯示一定數量的數組項目

<table> 
<tr> 
    <th></th> 
    <th>3</th> 
    <th>2</th> 
    <th>1</th> 
    <th>1</th> 
    <th>2</th> 
    <th>3</th> 
    <th></th> 

</tr> 
<% count = 0 %> 
<% while count < 4%> 
    <tr class="match_row" value="<%=count%>"> 
    <th id="left_competitor"><%= @matches[count][0].title %></th> 
    <% (1..6).each do |i|%> 
     <th> <input type="radio" class="group_<%=count%>" name="<%=count%>" value="<%= i%>"><br></th> 
    <% end %> 
    <th id="right_competitor"> <%= @matches[count][1].title %></th> 
    </tr> 
    <br /> 
    <% count += 1 %> 
<% end %> 
<br /> 
</table> 
<input id="save_votes" type="button" value="Next"> 

現在這裏是CoffeeScript的代碼:

move_to_next_match = -> 
    $("#save_votes").click -> display_next_competitors() 

display_next_competitors = -> 
    project_id = document.getElementById("project_id").value 
    match_rows = $('.match_row') 
    results = [] 
    for i in [0...match_rows.length] 
    do (i) -> 
     radios = $(".group_#{i}") 
     for j in [0...radios.length] 
     do (j) -> 
      if radios[j].checked 
      count = radios[j].getAttribute 'name' 
      number = radios[j].getAttribute 'value' 
      results.push("#{count} #{number}") 
    data = "{\"get_matches_results\": \"#{results}-#{project_id}-#{marker}\"}" 
    $.ajax({ 
    type: "POST" 
    url: "projectss/pca_results" 
    data: "data=" + data 
    }) 
    location.reload(true); 

我的想法是讓鑑於變量count(<%計數= 0%>)取一個變量的值而不是0,但我無法弄清楚如何做到這一點。 任何想法?

+1

你不需要'do(i) - >'和'do(j) - >'在你的代碼中。您只需要'do(x) - >'語法來捕獲由內部函數引用的值。 –

回答

2

這看起來像視圖模板中的很多邏輯,讓我想起了更多的PHP。

也許你可以表看看這個:http://railscasts.com/episodes/174-pagination-with-ajax

瑞恩使用寶石來處理分頁(查找雷或WillPaginate),然後使用jQuery的無礙來處理Ajax組件。

+0

感謝您的回覆:)。現在我可以顯示儘可能多的項目,但是我希望在顯示下一個項目之前執行一些代碼。 讓我解釋一下: 我顯示了兩個想法和6個radio_buttons,用戶點擊一個radio_button來選擇他最喜歡哪個想法。我想保存這4場比賽的結果,然後再轉到下一場比賽。你有什麼想法嗎? – kbaccouche

+0

您可能會想要使用處理分頁(在$ .getScript之前)的相同javascript函數,並向控制器中的保存方法發送另一個AJAX請求,而不是處理保存。 只需編寫另一個執行的Javscript函數,從DOM中選取要保存的值,然後將它們發送到您的控制器。 –

+1

偉大的工作感謝:) – kbaccouche

0

這不完全是從你的問題,你遇到什麼問題不清楚,但我猜它與代碼

$.ajax({ 
type: "POST" 
url: "projectss/pca_results" 
data: "data=" + data 
}) 
location.reload(true); 

其發送給潛在改變服務器的請求做網頁的內容,然後立即刷新頁面而不等待響應。這裏有一個競爭條件:有時候頁面在更新內容之前會刷新,有時會在更新之後。您應該改寫

$.ajax({ 
type: "POST" 
url: "projectss/pca_results" 
data: "data=" + data 
success: -> location.reload(true); 
}) 

以確保僅在處理更新後刷新頁面。或者,更好的做法是編寫一個success回調函數,用於更新頁面上的HTML,而不是刷新整個頁面。你的用戶會感謝你。

+0

其實我使用了Blake建議的Gem WillPaginate,它的工作原理現在我無法在顯示下一個項目之前執行CoffeeScript代碼 – kbaccouche

相關問題