over 1 year ago

将商品加入购物车添加Ajax效果
step1:在function中添加:remote => true
step2:在controller中对应的action里,删除redirect或者render(解释:一个 action 如果没有写明 redirect 或 render 的话,就会默认去找 action 名称的样板。例如在删除中添加ajax效果时,就会去找 destroy.js.erb)
step3:在需要变动的地方添加id="#自定义元素"
step4:增加对应的js.erb,

例子:$("#foo").html('<h1zoo</h1') 会把 #foo 这个元素的内容置换成 <h1zoo</h1

将收藏功能添加ajax效果
首先先实作收藏功能,仿照教材加入群组的功能
step1:建立moder(两个id)
step2:建立三者的关系,relationship属于user和post,post有很多relationships和members(through: :relationships,source: :user),user有很多relationships和collected_posts(through: :relationships,source: :post)
判断post与user是否有relationship关系
def is_member_of?(post)
collected_posts.include?(post)
end
step3:在views中建立save和unsave按钮
设置路径(routes.rb)
在controller中定义save和unsave
在user.rb中调出collected_posts来执行save和unsave的动作

step4:添加ajax效果
仿照教材ajax点赞步骤:
把整块的收藏HTML搬到partial去,然后用span包起来,方便定位(也可以用div,然后用补上一个id,等会jQuery移除时就知道是哪个元素了)
在对应的partial部分在function中加入:remote => ture,删除controller中对应action的redirect或者render,在unsave下添加rendar "save"(因为unsave没有action名称样板)
添加对应的js.erb,让 partial 字串可以变成合法的 JavaScript 字串

str = "<%=j render :partial = "save", :locals = { :post = @post } %";
$("#post-save-<%= @post.id %").html(str);

在做收藏功能时遇到一个困难,在views中用post而不是@post,解说:因为用了each do的缘故,each do 后边||这个符号里边用的是什么,就用什么。each do 就是把前边那个带@的变量,循环依次赋值给后边||这个符号里边的变量,之后就是用||符号里边的变量来拿数据。

← 李笑来的原则 刺猬的优雅 →
 
comments powered by Disqus