我正在爲如何使用Rails構建「upvote」流而苦苦掙扎,使得upvote在最終用戶身上立即發生。所以,首先,要定義upvote,我的意思就像你在reddit上做的那樣,點擊向上箭頭註冊一個記錄投票,然後增加一個計數器(另一個例子是在YouTube上豎起大拇指)。立即做出決定(Rails + MySQL + jQuery)
我正在使用Rails 3.2,jQuery和MySQL的數據庫。
現在我的流程是這樣的:
在html.erb模板時,給予好評元素有一個
.js-remote-upvote
類,它結合了點擊使用jQuery:$('body').on('click', '.js-remote-upvote', function(e) { e.preventDefault(); e.stopPropagation(); $this = $(e.currentTarget); $.ajax({ type: $this.data('method') == "post" ? "POST" : "GET", url: $this.data('url') }) });
data-url
轉到我的UpvotesController切換操作,該操作會創建upvote記錄並處理其他一些misc。的東西。- toggle.js.erb模板包含JavaScript代碼,該代碼在upvote元素上添加
.active
類,並遞增計數器。
問題是,無論我試圖在控制器中放置切換操作多少時間,它都會消耗一些時間(應用程序範圍內的before_filters,跟蹤等等)。這導致upvote不會對最終用戶產生瞬間感覺,當我們習慣於在reddit上立即發起upvotes時,我覺得這對於UX而言是一個糟糕的用戶體驗。
我在想這個方法嗎?或者我應該增加計數器並立即設置.active
css類之前請求傳遞給Rails?這對我來說是錯誤的,因爲控制器可能會拋出一個異常 - 基本上感覺就像js是「啞巴」一樣,無論後端發生什麼事情,都會立即向用戶顯示即時提示。
這是一個不好的模式,採取? 謝謝!
我建議你以顯示用戶立即投票。這不是那種需要很多安全性的信息。如果在下一頁出現問題,請重新加載此投票消失,所以你不會擔心有人高舉infitite時間 – Avdept 2015-02-06 10:49:06