再议构建前端UI组件的新思路

近日,看了玉伯写的《构建前端UI组件的新思路》一文,让我追忆起去年自己分享的一篇P文《随感协同开发的JS设计模式》,有几分共鸣……

话说去年支付宝新版收银台项目中,我就小试了一把这种组件编码模式,点滴心得,这里和大家做一个交流:

回顾一下之前说到的抽象类,对设计模式有所了解的同学可能会觉得有些眼熟,没错,初一看,觉得它很像一个抽象工厂,但是结合下面的基础类来看,你会发觉我并没有在各基础类中,重写getVessel,show,hide等方法,而是直接继承了抽象类中的这些方法。一定会有人不解为什么要这么做,无他,就因为他是JS,而非JAVA。一定的偶合度换来足够的灵活在我看来一点都不过分,更何况这个抽象类是必须确保绝对稳定的,他在成形后不允许被随意修改那是必须的。

AP.widget.basic = new AP.Class({
  setOptions:function(options){
    //接口设置
  },
  initialize:function(targets,options){
    //初始化方法,目的是建立targets子集元素和某方法的关联
  },
  getVessel:function(target){
    //获取满足target映射关系的容器
  },
  bindEvents:function(target,vessel){
    //这里绑定target的触发动作
  },
  action:function(){
    //target绑定的事件触发的执行函数,包含你要执行的逻辑
  },
  show:function(){
    //显示容器
  },
  hide:function(){
    //隐藏容器
  },
  setInterface:function(){
    //设置各组件共用接口
  }
})

..

6 continue reading