首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即时升级(Rails + MySQL + jQuery)

问即时升级(Rails + MySQL + jQuery)
EN

Stack Overflow用户
提问于 2015-02-05 19:39:03
回答 1查看 389关注 0票数 1

我很难用Rails & jQuery构建一个“向上投票”流,这样,对于最终用户来说,向上的投票就会立即发生。

因此,首先,要定义向上投票,我的意思是,就像在reddit上一样,单击向上箭头为记录注册一张选票,并增加一个计数器( YouTube上的拇指向上是另一个例子)。

对于db,我使用Rails 3.2、jQuery和MySQL。

现在我的想法是:

  1. 在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') }) });
  2. data-url转到我的UpvotesController切换操作,它创建向上投票记录,并处理其他一些错误。一些事情。
  3. 然后,toggle.js.erb模板包含javascript代码,该代码在upvote元素上添加一个.active类,并增加计数器。

问题是,无论我多么努力地将控制器中的切换动作外倾,它都会消耗一些时间(应用程序范围的before_filters、跟踪之类的东西)。这会导致对最终用户来说,向上的投票并不是即时的,当我们习惯于在reddit上立即更新时,我觉得这会导致一个糟糕的UX。

我这样想是正确的吗?或者应该在请求传递到Rails之前立即增加计数器并设置.active css类?这对我来说是不对的,因为控制器可能会抛出一个异常--基本上感觉js是“哑”的,不管后端发生了什么,它只会向用户显示一次即时的向上投票。

这会不会是一个不好的模式呢?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-06 10:45:37

我也是这样做的,但使用trick..As作为软件开发人员,我们只知道scenes.So背后发生了什么,不管您多么努力,您必须存储upvote计数,单击upvote,拥有count incremted...etc详细信息,然后更新视图。

不需要转到服务器,更新DB中的详细信息,然后更新VIEW..YOU,可以首先更新/更改视图,然后使用AJAX移动到服务器,这看起来非常适合用户.。

因此,首先对于好用户Experience..FIRST 使用jquery更新视图代码,然后使用ajax从控制器调用方法(至少对用户而言)更新投票...So,至少对于用户来说,即时,您知道在幕后至少需要2秒.

视图文件.

代码语言:javascript
复制
####update the count and also show that user has voted successfully by jquery
$('#image_up_<%= @image.id%>').html(function(i, val) { return val*1+1 });
$(".user_vote_status").html("You like this Image");

服务器端...update详细信息并再次更新视图以确认

代码语言:javascript
复制
  def vote

  @image = Image.find(params[:id]) 
  ###method to add count by current user
  @image.vote_by_current_user(current_user.id,params[:type]) 
  ###code to update the count 
  ## reload to get latest count
  @image.reload

  respond_to :js
end

in vote.js.erb

代码语言:javascript
复制
 $('#image_up_<%= @image.id%>').html("<%= @image.likes.size %>");
 //update the vote status on the page that user has liked/disliked the post
$(".user_vote_status").html("You like this Image");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28352605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档