我很难用Rails & jQuery构建一个“向上投票”流,这样,对于最终用户来说,向上的投票就会立即发生。
因此,首先,要定义向上投票,我的意思是,就像在reddit上一样,单击向上箭头为记录注册一张选票,并增加一个计数器( YouTube上的拇指向上是另一个例子)。
对于db,我使用Rails 3.2、jQuery和MySQL。
现在我的想法是:
.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切换操作,它创建向上投票记录,并处理其他一些错误。一些事情。.active类,并增加计数器。问题是,无论我多么努力地将控制器中的切换动作外倾,它都会消耗一些时间(应用程序范围的before_filters、跟踪之类的东西)。这会导致对最终用户来说,向上的投票并不是即时的,当我们习惯于在reddit上立即更新时,我觉得这会导致一个糟糕的UX。
我这样想是正确的吗?或者应该在请求传递到Rails之前立即增加计数器并设置.active css类?这对我来说是不对的,因为控制器可能会抛出一个异常--基本上感觉js是“哑”的,不管后端发生了什么,它只会向用户显示一次即时的向上投票。
这会不会是一个不好的模式呢?谢谢!
发布于 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秒.
视图文件.
####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详细信息并再次更新视图以确认
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
endin vote.js.erb
$('#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");https://stackoverflow.com/questions/28352605
复制相似问题