2014-04-26 22 views
0

我是Rails的新手,並且在測驗應用程序上工作,並且無法正確執行計時器。當用戶創建一個新的測驗時,控制器會根據問題的數量計算給定的時間,每個問題需要1分鐘,並且這個值存儲在數據庫中。用戶然後被重定向到第一個測驗問題並且定時器開始。他們可以選擇多項選擇答案,然後點擊「下一步」進入下一個問題。問題在於加載下一個問題的頁面並且定時器重新開始,而不是繼續在前一頁中停留的地方。Rails:更新基於DOM元素/ jQuery的數據庫

計時器是在JavaScript中。與

$(".timer").countdown("getTimes") 

哪有

<%= content_tag "div", class: "timer", data: {time: @time} do %><% end %> 

我可以訪問當前的時間在我的.js.coffee文件(當「下一步」點擊如):這在我看來是實現爲一個div我發送這個時間值到Rails控制器/數據庫,因爲它是一個javascript/jQuery對象?

或者我應該嘗試完全不同的方法嗎?

謝謝!

+0

如何在JS中實現計時器?你使用的是一個jQuery插件嗎?另外當點擊下一步是發送服務器請求或通過JS(隱藏/取消隱藏)問題在客戶端處理? – DevDude

+0

該定時器是一個jQuery插件(http://keith-wood.name/countdown.html)導入爲一個gem(https://github.com/mauriciopasquier/jquery-countdown-rails),並通過資產管道添加( // =需要jquery.countdown)。當點擊「下一步」時,答案將被髮送回服務器,下一個問題將在下一頁顯示,從服務器(test/1/questions/1變成test/1/questions/2) – user3291025

回答

0

按DevDude的指導下,一個隱藏的輸入字段努力解決這個問題。

我的看法有「content_tag」中的計時器 隱藏的輸入被放置在窗體中。 提交按鈕被賦予一個「nav-time」類來調用coffeescript。 show.html.erb

<%= content_tag "div", class: "timer", data: {time: @time} do %><% end %> 

<%= form_tag . . . %> 
. 
. 
<input type="hidden" name="time-submitted" value=""> 
. 
. 
<%= submit_tag "Next", class: "nav-time"%> 
<%end%> 

的CoffeeScript的更新的隱藏字段的值。

timed_test.js.coffee

jQuery -> 
    $('.nav-time').on 'click', (event) -> 
    times = $(".timer").countdown("getTimes") 
    $('input[name="time-submitted"]').val(times) 

的時間被傳遞給通過PARAMS [時間提交]控制器,並且數據庫被更新。當下一頁被渲染時,時間就是它在前一頁中停止的地方。