【发布时间】:2015-02-05 19:39:03
【问题描述】:
我正在努力解决如何使用 Rails 和 jQuery 构建“upvote”流程,这样就最终用户而言,upvote 会立即发生。
首先,要定义 upvote,我的意思是就像您在 reddit 上所做的那样,点击向上箭头会记录对记录的投票,并增加一个计数器(YouTube 上的竖起大拇指是另一个示例)。
我正在为数据库使用 Rails 3.2、jQuery 和 MySQL。
现在我的流程是这样的:
-
在 html.erb 模板中,upvote 元素有一个
.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 记录,并处理其他一些杂项。东西。- toggle.js.erb 模板随后包含在 upvote 元素上添加
.active类并递增计数器的 javascript 代码。
问题在于,无论我如何尝试在控制器中进行切换操作,它都会消耗一些时间(应用程序范围的 before_filters、跟踪等)。这导致最终用户不会立即感到赞成,当我们习惯于在 reddit 上立即进行赞成时,我认为这会导致糟糕的用户体验。
我是否以正确的方式思考这个问题?或者我应该增加计数器并立即设置.active css 类之前请求被传递给Rails?这对我来说感觉不对,因为控制器可能会抛出异常 - 基本上感觉 js 是“愚蠢的”,并且无论后端发生什么都会向用户显示即时的支持。
采用这种模式会不会不好? 谢谢!
【问题讨论】:
-
我建议您显示该用户立即投票。这不是那种需要很多安全性的信息。如果下一页出现问题,请重新加载此投票消失,因此您不必担心有人会无限次投票
标签: javascript jquery html ruby-on-rails ruby-on-rails-3