项目背景
美的官方商城
小程序上线后,考虑到运营的需求,所以要有相应的工具辅助运营。基于之前PC、H5已有一套完整、成熟的运营工具,可一键发布到2大平台,所以,最好的方法就是在原有的工具上增加发布到小程序平台
的功能。
原有思路
对于PC、H5平台,我们采用的是运营每次使用工具制作完成后,点击发布
按钮时,动态生成一份相应平台的相关的view、css文件,相关数据也会存入数据库,然后用带参的controller调用view文件即可。一旦运营想更改设置,只需重新保存、发布即可即时生效。
小程序的特殊性
对PC、H5平台而言,上面的思路能很好的解决问题,然而在小程序中却走不通。小程序是个封闭的环境,任何代码、文字等信息的修改都需要重新打包上传至微信,审核通过后才能生效。 这对于需要修改即刻
生效的运营而言,显然是需要另辟蹊径的。
新思路
既然不能动代码,就只能利用动态数据了。最终的方案是:点击发布
按钮时,会生成一份包含卖场所有信息的json数据,当用户打开小程序页面时,请求这份数据,并根据数据选择对应模板渲染。所有模块的模板事先已封装好,包括wxml、wxss、js,只需根据数据选择不同模板并传参即可。再结合我们已有的banner配置工具,就能实现不发版本便能上线新活动页面了。
所以,我们的流程是:
也因此,我们后续有新的模块需求时,只需要开发新模块的wxml,wxss,js,然后按约定规则定义好新模板需要的参数即可。
流程
首先通过我们已有的活动自助平台, 制作活动页面,点击“发布到小程序”后,生成一份这样的json文件:
在小程序中请求这个json文件,并对其进行处理:css单位的处理px=>rpx,各种模块需要的参数,滚动加载处理、调后台接口获取数据、合并request请求等等。
最终处理好的数据如下图。

接着setData,渲染楼层就OK了。
|
|
从上面可以看出:循环floorDataArr,根据item.floorType即可调用对应的模块。接下来,我们就需要开发对应的模块了。
模块的开发
对每个模块按照制作页面的约定,开发对应的wxml,wxss,js。类似下面这样。
|
|
1.width:
userData
这些格式就是我们之前在json中处理过的;
2.bindtap="getCoupon"
这种事件,就会在对应的模块js中处理;
3.其余的不变的样式都会写在模块对应的wxss中,通过import引入;
这就是一个模块的骨架。需要支持新功能时,像上面这样开发新模块即可。
至此,整个流程就完了。当运营改了配置后,点击发布到小程序
,便会生成新的json文件,小程序依然会根据新json文件重复上述过程。由此即可实现不发版本便能更新卖场的要求。
踩过的坑
这里只列举几个和此次开发相关的、比较特别的问题。
1.小程序目前只支持自定义的template,并不支持自定义的组件,所以,我们使用了曲线救国的方法:用extend方法将template的相关逻辑js扩展到page对象中,从而达到模拟组件的目的。例如上面提到的链接控件的bindtap="getCoupon"
,领券的js就会写在modules/widget_link.js
中,通过extend扩展到page中。具体实现如下:
2.小程序最多同时只允许发5个http请求,而卖场上的商品池接口会有很多个。最终我们选择合并请求,把所有的商品池请求合并,统一在CGI层处理,返回数据后再重新分发组装。
3.在模块中通过ajax获取的数据,无法在主流程js文件中更新。
解决方法:在模块的js中获取页面实例:let pageInstance = getApp().getPage(),ajax回调成功后更新数据:pageInstance.setData({floorDataArr : floorDataArr})。
4.要注意模拟器和真机的区别。在模拟器上正常之后要在真机预览,因为二者表现并不完全一致。例如:模拟器中图片URL src=”//img.mdcdn.cn/xxx”是正常的,但是真机中图片就出不来,必须是src=”https://img.mdcdn.cn/xxx“ 才行。
5.卖场首页数据、楼层多时,滚动卡顿,不流畅。
解决方法:滚动加载楼层数据。以楼层(floor)为单位,每个楼层内的组件、数据(例如:问题2中提到的合并请求)、模板单独获取和渲染,独立于其他楼层,滚动加载各个楼层。之前是卖场的所有数据统一获取处理,这样当请求接口多,卖场复杂时,就会卡顿。
6.scroll-view的bindscrolltolower事件问题:只有当wxml文档高度大于屏幕高度时,才会触发bindscrolltolower事件,而卖场的楼层是运营自定义制作的,高度不定,因此会出现:第一楼层高度低于手机屏幕高度时,不会触发其余楼层加载的尴尬情况。
解决方法:在卖场制作数据生成时,记录楼层高度,小程序这里根据各个楼层高度,计算首屏应该加载几个楼层,首屏以外的楼层再滚动加载。
7.看代码
|
|
最后来张成品:


欢迎来访
