需求:

  实现一套灵活的活动组件模板,编辑人员只需要打开后台,拖拽相应组件,填入相应内容,最终就生成一个活动页面。

因为涉及投票,评论,关注等功能(每个功能都当做一个组件),所以一个富文本编辑器是无法实现的。

生成的h5活动页面,还有几种环境:公司APP内,外部浏览器,微信&QQ内置浏览器。

几种状态:登录,未登录,游客状态等(状态具体内容不做解释)。

两个项目支持:

  那么实现这一套,需要两个项目,一个项目是活动模板编辑器,一个是前端展示h5页面。

活动模板编辑器:

  活动模板编辑器主要实现3个功能:各个组件,内容容器 ,生成json。

(1)组件:每个组件对应属性,可以填写相应内容

  (2)内容容器:一个可视的容器,把上图相应组件拖拽到内容容器中进行排版

  

  (3)生成json:生成一个json,供h5获取,根据相应规则展示。下面这个json是当前项目生成的。

这个json还不够完善,给到h5的json需要经过后端处理,比如根据用户的登录状态,会有不同的标示和状态展示

  1. [
  2. {
  3. "type": "user",
  4. "userId": 37907899,
  5. "avatar": "/male.png",
  6. "author": "蒲xx",
  7. },
  8. {
  9. "type": "title",
  10. "title": "这是一个有所有组件的测试活动"
  11. },
  12. {
  13. "type": "tag",
  14. "items": [
  15. {
  16. "id": 0,
  17. "name": "标签"
  18. }
  19. ]
  20. },
  21. {
  22. "type": "title",
  23. "text": "测个试",
  24. "id": 1467788578568
  25. },
  26. {
  27. "type": "content",
  28. "text": "那么我们就来做个测试,你喜欢哪个?",
  29. "id": 1467788579375
  30. },
  31. {
  32. "type": "user",
  33. "userId": "10001280",
  34. "id": 1467788578375,
  35. "avatar": "/avatar/141153987724884.jpg",
  36. "author": "张师",
  37. "isFollow": false
  38. },
  39. {
  40. "type": "vote",
  41. "title": "你喜欢吃什么程序员",
  42. "voteId": 1,
  43. "items": [
  44. {
  45. "itemId": 1,
  46. "name": "大卫"
  47. },
  48. {
  49. "itemId": 2,
  50. "name": "飞狐"
  51. },
  52. {
  53. "itemId": 3,
  54. "name": "菜锅"
  55. },
  56. {
  57. "itemId": 4,
  58. "name": "狼笛生"
  59. },
  60. {
  61. "itemId": 5,
  62. "name": "子慕"
  63. }
  64. ],
  65. "id": 1467788580095
  66. },
  67. {
  68. "type": "image",
  69. "name": "默认图片",
  70. "src": "/FvZvDcUNHGUxZoC5hKuHBdJstWyD",
  71. "id": 1467788581943
  72. }
  73.  
  74. ]

  好,这个项目说完了,反正不是我做的。哈哈。

前端h5展示实现:

  该我出场了,目前我们知道,我们获取的大致数据格式了。但是这些我都先不管。

  我需要实现这个项目的流程如下:

    1. 新建项目,划分好功能和项目结构

    2. 实现各个组件的展示和交互

    3. 打开一个入口文件,引入所有组件。

    4. 入口文件中获取json,根据type的内容找到相应组件,载入页面,渲染。

  (1)新建项目,划分好功能和项目结构 :

    这里主要是写好一个入口文件,新建一个组件文件夹里面写所有组件,最终通过requirejs在入口文件把所有组件引用进来。

    组件结构如下:

    

  (2) 具体组件实现跳过不说

  (3)当组件写好,在入口index中引入,大致如下:

    

  1. define([
  2.  
  3. //content
  4. 'CommonPath/content/en.content',
  5. 'CommonPath/content/mod.content',
  6.  
  7. //title
  8. 'CommonPath/title/en.title',
  9. 'CommonPath/title/mod.title',
  10.  
  11. //user
  12. 'CommonPath/user/en.user',
  13. 'CommonPath/user/mod.user',
  14.  
  15. ], function (
  16.  
  17. //Content
  18. ContentEntity,
  19. ContentMod,
  20.  
  21. //title
  22. TitleEntity,
  23. TitleMod,
  24.  
  25. //user
  26. UserEntity,
  27. UserMod
  28.  
  29. ) {
  30. //index code...
  31.  
  32. })

  (4)通过接口,我们获取到json,对json进行处理。

     大致处理代码如下:

  1. var map = {
  2. title: [TitleMod, TitleEntity],
  3. user: [UserMod, UserEntity],
  4. content: [ContentMod, ContentEntity]
  5. };
  6.  
  7. for(var i = 0, len = this.data.content.length; i < len; i++) {
  8. item = this.data.content[i];
  9. if(map[item.type]) {
  10. var entity = new map[item.type][1]({
  11. data: this.data.content[i]
  12. })
  13. var mod = new map[item.type][0]({
  14. view: this,
  15. entity: entity
  16. });
  17. mod.render();
  18. }
  19. }

  以上代码,就是进行一个匹配,匹配到对应type,插入数据,载入模板到页面,并且渲染。

    

最终效果:

  

  

总结:

  开发过程中,问题还是很多的,项目看起来内容不算太多,但确实也不是那么简单的。

除了以上步骤,开发过程中还要处理一些事情:

  •   在APP外打开h5页面,我们需要引流到APP,需要调用一些跳转协议。
  •   如果用户未下载APP,需要引导下载。
  •   在APP内打开h5未登录,需要引导登录,跳转登录协议。
  •   在APP内需要通过桥接协议获取用户登录信息,发送给后端,后端生成登录态。
  •   需要调用app内的分享协议,打开分享功能
  •   微信分享这些功能当然也要有
  •   商量接口、调试接口

  开发过程中也会因为一些bug耽误了很多时间。

  •   fastclick引用问题:

      在微信、qq的内置浏览器和小部分浏览器中,fastclick会影响video标签的触摸事件。

    最开始以为是X5内置不支持video,点击播放没有反应。但是有时候又突然能点击,概率很小。

    后来又以为是第一次播放必须通过手动play才能播放。

    总之最终发现是fastclick的原因,加上nofastclick类在dom上就解决了。不过这个问题确实也离不开X5浏览器自身的问题。

  •   后端登录态问题,这个问题主要在后端,不过咱们也是配合了的。
  •   需求矛盾,需求冲突,这个难免,具体情况不方便说~

  打完收工,不容易,不容易~

组件化h5活动模板的实现的更多相关文章

  1. vue.js组件化开发实践

    前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...

  2. VUE.JS组件化

    VUE.JS组件化 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎 ...

  3. vue组件化开发实践

    前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了一下的内容.首先会对使用Vue进行开发的一些前期需要的技术储备进行简单 ...

  4. Android业务组件化之子模块SubModule的拆分以及它们之间的路由Router实现

    前言: 前面分析了APP的现状以及业务组件化的一些探讨(Android业务组件化之现状分析与探讨),以及通信的桥梁Scheme的使用(Android业务组件化之URL Scheme使用),今天重点来聊 ...

  5. Android业务组件化之URL Scheme使用

    前言: 最近公司业务发展迅速,单一的项目工程不再适合公司发展需要,所以开始推进公司APP业务组件化,很荣幸自己能够牵头做这件事,经过研究实现组件化的通信方案通过URL Scheme,所以想着现在还是在 ...

  6. 从DOM操作看Vue&React的前端组件化,顺带补齐React的demo

    前言 接上文:谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo 上次写完博客后,有朋友反应第一内容有点深,看着迷迷糊糊:第二是感觉没什么使用场景,太过业务化,还不如直接写Vue ...

  7. 谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo

    前言 前端已经过了单兵作战的时代了,现在一个稍微复杂一点的项目都需要几个人协同开发,一个战略级别的APP的话分工会更细,比如携程: 携程app = 机票频道 + 酒店频道 + 旅游频道 + ..... ...

  8. 【腾讯Bugly干货分享】打造“微信小程序”组件化开发框架

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/2nQzsuqq7Avgs8wsRizUhw 作者:Gc ...

  9. iOS开发之组件化架构漫谈

    前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬,还是 ...

随机推荐

  1. 不同类型的指针+1之后增加的大小不同(a,&a的地址是一样的,但意思不一样)

    main() { ]={,,,,}; ); printf(),*(ptr-)); } *(a+1)就是a[1],*(ptr-1)就是a[4], 执行结果是2, 5.&a+1不是首地址+1,系统 ...

  2. sqlmap http头注入的一个技巧

    sqlmap.py -u "url" --host * --thread=1 --batch -v 1 --delay=0.7 --dbms mysql   --current-d ...

  3. (翻译)开始iOS 7中自动布局教程(二)

    这篇教程的前半部分被翻译出来很久了,我也是通过这个教程学会的IOS自动布局.但是后半部分(即本篇)一直未有翻译,正好最近跳坑翻译,就寻来这篇教程,进行翻译.前半部分已经转载至本博客,后半部分即本篇.学 ...

  4. JDBC增删改查简单测试

    首先编写一个entity以便与数据库表文件相对应 lyTable.java public class LyTable implements java.io.Serializable { private ...

  5. 利用结果集元数据将查询结果封装为map

    package it.cast.jdbc; import java.sql.Connection; import java.sql.ParameterMetaData; import java.sql ...

  6. 玩转SQL Server复制回路の变更数据类型、未分区表转为分区表

    玩转SQL Server复制回路の变更数据类型.未分区表转为分区表 复制的应用: 初级应用:读写分离.数据库备份 高级应用:搬迁大型数据库(跨机房).变更数据类型.未分区表转为分区表 京东的复制专家 ...

  7. .NET的Actor模型:Orleans

    Orleans是微软推出的类似Scala Akka的Actor模型,Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展的云服务, 可用于实现DDD+EventSou ...

  8. Prim 最小生成树算法

    Prim 算法是一种解决最小生成树问题(Minimum Spanning Tree)的算法.和 Kruskal 算法类似,Prim 算法的设计也是基于贪心算法(Greedy algorithm). P ...

  9. 干掉Unity3D

    我为什么想干掉Unity3D? 这个问题容我不答,每个做技术的人总有一些完美主义. 你使用u3d的过程中是不是痛并快乐着呢. 就从两个国内具有相当普遍性的痛点说起. il2cpp,unity作出了这个 ...

  10. 缓存篇(Cache)~大话开篇

    回到占占推荐博客索引 闲话杂淡 想写这篇文章很久了,但总是感觉内功还不太够,总觉得,要写这种编程领域里的心法(内功)的文章,需要有足够的实践,需要对具体领域非常了解,才能写出来.如今,感觉自己有写这种 ...