ruby on rails(9) -- AJAX(3)

[/code]    效率不高啊, :shock: ,看来还是要提高效率。要专注,要心无房屋。
这节主要是用helper隐藏作侧边栏的购物车,如果没有东西时,隐藏购物车,有东西时渐进显示,突然显示出来,会吓坏小朋友的,所以我们要慢慢的显示出来。
判断购物车首先不为空 <%unless @cart.items.emtpy? ... end%>
给购物车加上渐进效果,同样是用Ajax。
在view/store/add_to_cart.js.rjs 加一下内容
page[:cart].visual_effect :blind_down if @cart.total_items == 1
toal_item定义在model/cart.rb下
[code="ruby"]
def total_items
@items.sum{|item|item.quantity}
end

接下来,当购物车为空的时候,不显示,通常是加上一个style display:none
如一般写法。

<div id="cart"<%if @cart.items.empty? %>
style="display:none"
<% end %>
>
</div>

太难看了,而且也容易出错,比如右边尖括号,。
rails 提供了helper 处理 view。[color=red]helper可以抽象出view里面的一些过程(直译),那partial处理逻辑/数据,是这样分工么?什么时候用哪个[/color]
一个controller默认生成一个helper.
编辑view/layouts/store.html.erb

<div id="cart">
<%hidden_div_if(@cart.items.empty?,:id => "cart") do%>
<%= render (:partial => "cart",:object => @cart)%>
<% end %> #为什么用 do end 多行rails
</div>

在StoreHelper定义hidden_div_if

module StoreHelper
def hidden_div_if(condition,attributes = {},&block)
if condition
attributes['style'] = "disaply:none"
end
content_tag("div",attributes,&block)
end
end

content_tag(name,content_or_option,option),&block把hidden_div_if传递给content_tag
最后改一点,判断是否使用js.rails用xhr缩写代表XMLHttpRequest。用 if request.xhr?判断是否使用js

if request.xhr?
respond_to{|format| format.js}
else
redirect_to_index
end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值