black_star 发表于 2013-2-7 14:38:16

ruby on rails(9) -

效率不高啊,http://www.agoit.com/images/smiles/icon_eek.gif ,看来还是要提高效率。要专注,要心无房屋。
    这节主要是用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下
   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。helper可以抽象出view里面的一些过程(直译),那partial处理逻辑/数据,是这样分工么?什么时候用哪个
一个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 StoreHelperdef hidden_div_if(condition,attributes = {},&block)if conditionattributes['style'] = "disaply:none"endcontent_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}elseredirect_to_indexend
页: [1]
查看完整版本: ruby on rails(9) -