购物车页面的实现(逻辑)2
来自CloudWiki
目录
绑定选择事件
商品的选择/取消选择
(文件名称)cart/index.js
bindEvent : function(){ var _this = this; // 商品的选择 / 取消选择 $(document).on('click', '.cart-select', function(){ var $this = $(this), productId = $this.parents('.cart-table').data('product-id'); // 选中 if($this.is(':checked')){ _cart.selectProduct(productId, function(res){ _this.renderCart(res); }, function(errMsg){ _this.showCartError(); }); } // 取消选中 else{ _cart.unselectProduct(productId, function(res){ _this.renderCart(res); }, function(errMsg){ _this.showCartError(); }); } }); },
文件index.string 添加product-id:
<div class="cart-list"> {{#cartProductVoList}} <table class="cart-table" data-product-id="{{productId}}">
(文件名称)cart/index.js
封装错误信息显示方法:
// 显示错误信息 showCartError: function(){ $('.page-wrap').html('<p class="err-tip">哪里不对了,刷新下试试吧。</p>'); }
把文件中所有的显示错误信息都用这个封装函数来代替:
// 加载商品详情的数据 loadCart : function(){ var _this = this; // 获取购物车列表 _cart.getCartList(function(res){ _this.renderCart(res); }, function(errMsg){ _this.showCartError(); }) },
商品的全选和取消全选
(文件名称)cart/index.js中bindEvent方法
// 商品的全选 / 取消全选 $(document).on('click', '.cart-select-all', function(){ var $this = $(this); // 全选 if($this.is(':checked')){ _cart.selectAllProduct(function(res){ _this.renderCart(res); }, function(errMsg){ _this.showCartError(); }); } // 取消全选 else{ _cart.unselectAllProduct(function(res){ _this.renderCart(res); }, function(errMsg){ _this.showCartError(); }); } });
编写服务端接口函数
选择函数selectProduct
文件 service/cart-service.js
// 选择购物车商品 selectProduct : function(productId, resolve, reject){ _mm.request({ url : _mm.getServerUrl('/cart/select.do'), data : { productId : productId }, success : resolve, error : reject }); },
取消选择unselectProduct
文件 service/cart-service.js
// 取消选择购物车商品 unselectProduct : function(productId, resolve, reject){ _mm.request({ url : _mm.getServerUrl('/cart/un_select.do'), data : { productId : productId }, success : resolve, error : reject }); },
全选函数selectALLProduct
文件 service/cart-service.js
// 选中全部商品 selectAllProduct : function(resolve, reject){ _mm.request({ url : _mm.getServerUrl('/cart/select_all.do'), success : resolve, error : reject }); },
取消全选函数
文件 service/cart-service.js
// 取消选中全部商品 unselectAllProduct : function(resolve, reject){ _mm.request({ url : _mm.getServerUrl('/cart/un_select_all.do'), success : resolve, error : reject }); },
测试,发现productId没有传过来:
调试,设置断点:
测试效果:
处理商品数量增减事件
绑定商品数量增减事件
文件cart/index.js中bindEvent方法
根据选择的按钮,做相应的增减变化
// 商品数量的变化 $(document).on('click', '.count-btn', function(){ var $this = $(this), $pCount = $this.siblings('.count-input'), currCount = parseInt($pCount.val()), type = $this.hasClass('plus') ? 'plus' : 'minus', productId = $this.parents('.cart-table').data('product-id'), minCount = 1, maxCount = parseInt($pCount.data('max')), newCount = 0; if(type === 'plus'){ if(currCount >= maxCount){ _mm.errorTips('该商品数量已达到上限'); return; } newCount = currCount + 1; }else if(type === 'minus'){ if(currCount <= minCount){ return; } newCount = currCount - 1; } // 更新购物车商品数量 _cart.updateProduct({ productId : productId, count : newCount }, function(res){ _this.renderCart(res); }, function(errMsg){ _this.showCartError(); }); });
编写服务端接口函数
文件:service/cart-service.js
// 更新购物车商品数量 updateProduct : function(productInfo, resolve, reject){ _mm.request({ url : _mm.getServerUrl('/cart/update.do'), data : productInfo, success : resolve, error : reject }); },
效果:
处理删除商品事件
绑定删除事件
文件cart/index.js中bindEvent方法
// 删除单个商品 $(document).on('click', '.cart-delete', function(){ if(window.confirm('确认要删除该商品?')){ var productId = $(this).parents('.cart-table') .data('product-id'); _this.deleteCartProduct(productId); } });
文件cart/index.js中,编写删除函数deleteCartProduct :
// 删除指定商品,支持批量,productId用逗号分割 deleteCartProduct : function(productIds){ var _this = this; _cart.deleteProduct(productIds, function(res){ _this.renderCart(res); }, function(errMsg){ _this.showCartError(); }); },
编写服务端接口函数
文件service/cart-service.js
// 删除指定商品 deleteProduct : function(productIds, resolve, reject){ _mm.request({ url : _mm.getServerUrl('/cart/delete_product.do'), data : { productIds : productIds }, success : resolve, error : reject }); },
效果: