首页 > 代码库 > [AWDwR4] chapter 11 Play time 2th: use blind_up effect

[AWDwR4] chapter 11 Play time 2th: use blind_up effect

chapter 11 Play time

Play time 2:
    使用Script.aculo.us JavaScript库中的blind_up效果代替隐藏cart这个div的过程。
    上网搜了一下,jquery中有blind这个效果,所以就用jquery中的hide("blind"),而不使用Script.aculo.us JavaScript库
    app/views/carts/destroy.js.erb这个文件可以有好几种写法,对照着可以加深理解:
    
    简单粗暴的方案A:      

 $(‘#cart‘).hide("blind", 1000);

    这个方案在删除Cart时可以正常隐藏cart这个div,但是后续操作会有问题,你能看出来吗?
    
    
    使用hide会把当前的cart隐藏,下次Add Cart时,客户端执行 app/views/line_items/create.js.erb 产生的js代码时,由于不满足$(‘#cart tr‘).length == 1这个条件,所以 {$(‘#cart‘).show(‘blind‘, 1000);} 这句不会执行。

    修改后的方案B: 

 $(‘#cart‘).html("<%= j render @cart %>");
 $(‘#cart‘).hide("blind", 1000);

    由于在调用app/views/carts/destroy.js.erb这个模板时,cart中的line_items已经被清空了,所以render(@cart)后,cart这个div中只剩了total_line这个tr,下次Add Cart时,就不会出问题了。此时再调用 hide("blind")在垂直方向(默认)上隐藏cart这个div。
          
    官网的提示是使用jquery的not来选择除了 .total_line 的所有tr,并删除之,这样就不用 render @cart 了。下次Add To cart时,就可以正常显示cart这个div了。
        C,不需要render @cart的方案:       

$(‘#cart tr‘).not(".total_line").remove();  
$(‘#cart‘).hide("blind", 1000);  

[AWDwR4] chapter 11 Play time 2th: use blind_up effect