Authored by ccbikai

Merge branch 'develop'

... ... @@ -14,7 +14,22 @@ const model = {
product(params) {
return api.get('', Object.assign({
method: 'h5.product.data'
}, params));
}, params))
.then(result => {
// result.storage 的 数值 不可靠,循环累加 库存
let storage = 0;
if (result.goodsList) {
for (let good of result.goodsList) {
for (let size of good.goodsSizeBoList) {
storage += size.goodsSizeStorageNum;
}
}
}
result.storage = storage;
return result;
});
},
... ...
# blk-wap项目中的一些注意点
## 框架结构
## 1.框架结构
首先,我们先说一下blk-wap项目的架构,这样便于后面的人能够快速上手
1. 服务端:node的express框架
2. ui端:vue + gulp + webpack
## 目录结构
## 2.目录结构
apps: node服务端业务代码
... ... @@ -22,13 +23,43 @@ app.js: node服务入口文件
dispatch.js :路由分发文件
## vue
## 3.vue
关于vue部分,如果不熟悉的话,大家可以查看一下官方文档
http://cn.vuejs.org/guide/
这里面主要是组件方面知识,用的比较多。
## 与app端的交互
## 4.与app端的交互
混合模式下,比较麻烦的地方是与app原生端的交互。因为有些业务处理需要app端配合处理。
* 涉及到与app端跳转相关的逻辑可参看:public/js/common/intercept-click.js文件
具体规则可参看:http://git.yoho.cn/mobile/AppJSBridge/tree/master
* 监听app端事件参看:public/js/common/vue-bus.js文件,是通过一个全局的vue实例的on及emit来处理的。
## 5.页面刷新
目前页面跳转时。有些场合下需要刷新页面,由于刷新的逻辑在每个页面都不同,所以app端很难来处理。没办法,只能由h5这边来做了。
那h5这边是怎么拿到前一个页面的状态,来判定本页面是否需要刷新呢?
我们目前的做法是通过localstroage来处理的,也就是yoho.js中的 store属性。
如果,你有更好的想法,欢迎提出来。
## 6.开发中碰到的一些坑
前端开发,最大的一个坑莫过于适配不同的手机浏览器。混合模式下,这个问题稍微有些好转,因为我们会指定webview的版本号。
不过对于ios及android的区别,适配的工作量仍然很大。
我先列出我碰到的一些适配问题,欢迎补充
* <input type='date'> 元素在ios和android的效果是完全不一样的(比如在ios中会显示年月日,在android中则是/)。而这个元素的可设置的属性也很有限。
于是只能用曲线救国的办法了, 在input元素下面方一个span,然后把input给背景透明,这样我们就可以通过改动span来显示我们想要的了(欢迎更好的解决方法)
* <select> 元素 在ios和android也是完全不一样,在ios中默认值如果未改变的话,是不会触发change事件的。所以目前的做法是在ios的选择项中多加一个默认值。
而android则不需要。目前的做法是会根据ua来判断是否是ios,来进行不同的处理
* 目前blk-wap项目中的字体全部用的css,不要手动去写unicode码
目前想到的就是这么多,后面会持续更新。。。
... ...
... ... @@ -10,10 +10,12 @@
const $ = require('jquery');
const ANIMATIONS = {
none: { in : 'overlay-in',
none: {
in: 'overlay-in',
out: 'overlay-out'
},
fade: { in : 'overlay-fade-in',
fade: {
in: 'overlay-fade-in',
out: 'overlay-fade-out'
}
};
... ... @@ -28,7 +30,8 @@ class Overlay {
clickToClose: true, // 点击关闭
onClose: $.noop, // 关闭回调函数
animation: 'fade', // 动画效果
disableScrolling: true // 是否禁止
disableScrolling: true, // 是否禁止
disableTouchMove: false
};
// 初始化参数
... ... @@ -49,7 +52,7 @@ class Overlay {
}
});
if (this.settings.disableScrolling) {
if (this.settings.disableScrolling && this.settings.disableTouchMove) {
// 覆盖层出现时阻止滚动
document.body.addEventListener('touchmove', (e) => {
if (this.isVisible) {
... ...
... ... @@ -36,6 +36,7 @@
ul,
li {
position: relative;
margin: 0;
padding: 0;
list-style: none;
... ... @@ -192,8 +193,15 @@
}
a {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 20px;
display: inline;
color: #000;
overflow: hidden;
text-overflow: ellipsis;
}
}
}
... ...