是YY临时想加的另一个功能。需求采集平台旨在采集用户的需求,然后给出基本的回答和更新需求状态,但是对于那些重复的需求,没有必要要求不同的用户重复提交,而是为了让采集者知道哪些需求是经常被用户提出,需要类似like的功能。如果看到相同的需求,则不需要添加新的需求,点赞即可。首先从用户的角度简单分析一下这个功能:需要在每个必填项上添加一个点赞按钮,触发点赞动作取消然后分析系统是如何实现的:数据库:后台表需要有一个字段来记录每个必填项的点赞数。添加后初始值为1,like+1,cancellike-1repeatlike:这道题的实现方法其实挺多的,比较灵活。比较常见的一种实现方式应该是通过用户名来查重。用户只能对一个需求项目点赞一次。如果再次点赞,则会取消点赞。但是这个项目一开始并没有考虑设计一个用户登录的功能,因为需求收集可能是一个开放的平台。在公司内网环境下,用户无需登录就可以通过需求采集平台提交用户问题或者建议。所以这里想着是否可以通过cookie来实现这个功能,最近刚学习jQuery就看cookie那块。大体思路:页面加载完成后,检查是否有对应的cookie。如果没有,说明你还没有喜欢过,设置风格A;如果找到对应的cookie,则证明你喜欢,设置样式B;点击动作也是一样的,同样是判断是否有条目对应的cookie。如果有,点击为-1;以后用。前端风格动画如下:第一个like+1,背景变成浅红色;第二个喜欢-1,风格恢复;而点赞之后,页面刷新后还是点赞状态。接下来看看js是如何实现的:/*被赞的消息样式设置,防止页面刷新后样式返回原来的样式*/$('.message-list-item').each(function(){varmid=$(this).attr('mid');varcookie=$.cookie('haveUp'+mid);if(cookie&&cookie==2){//2表示喜欢,1表示不喜欢like$(this).find('div.up').addClass('up-yes');//up-yes是红色背景样式}});/*像请求一样上传消息*/$('.qa-rank.up').click(function(){varmessageId=$(this).attr('data-messageId');var$plus=$('+1');var$minus=$('-1');var$this=$(this);varbool=$.cookie('haveUp'+messageId);//Upornotif(!bool||bool==1){//像一个请求$plus.insertAfter($this).css({'position':'relative','z-index':'1','color':'#C30'}).animate({top:-30+'px',left:+30+'px'},'slow',function(){$(this).fadeIn('slow').remove();});$.ajax({url:'/ajax/up/'+messageId,method:'POST',global:false,success:function(result){$this.addClass('up-yes');$.cookie('haveUp'+messageId,2,{path:'/',expires:1});}});返回假;}else{$minus.insertAfter($this).css({//不像'position':'relative','z-index':'1','color':'#5cb85c'}).animate({顶部:-30+'px',左侧:+30+'px'},'slow',function(){$(this).fadeIn('slow').remove();});$.ajax({url:'/ajax/cancel/'+messageId,method:'POST',global:false,success:function(result){$this.removeClass('up-yes');$.cookie('haveUp'+messageId,1,{path:'/'});}});返回假;}});代码逻辑很简单,主要是判断是否喜欢,如果喜欢,则创建一个id为minus的span节点插入到DOM中,然后给出动画效果;如果没有like,则创建一个id为plus的span节点,将span节点插入到DOM中,同时给出动画效果;同时通过ajax向后台异步请求数据,更新数据库中的点赞数好了,这个小功能基本实现了。目前尚不清楚这个想法是否正确。如果不是,请纠正我。学习是一个不断实验的过程。后面我们会继续介绍项目的一些内容。