自研框架wap.js实践

花费几天时间,研发,整进红包。未经测试,未经生产验证。强烈不建议拿去使用,待我使用后,优化,验证可用,才可以使用。

暂时只能用来学习,或通过我差劲的代码水准,来提升自己的技术优越感。

示例

使用分为3个步骤:

1, 配置模板渲染中心,方便别人可以看到你的模板渲染,请求是什么关系,复杂度怎样

2, 配置事件分发中心  方便观察事件分发,事件复杂度

3,写对应的请求方法、渲染方法。  流程由框架自动串起来。如果还有其他_开头的方法(标记私有),均是辅助渲染或事件的。

我认为,界面,存在模板渲染,和事件分发两大主要业务!这是我建立这两中心的原因。

/*群红包*/
define(function(require, exports, module) {
    //基本库
    require(‘zepto‘);

    //自启动组件
    require.async(‘header‘);
    require.async(‘footer‘);

    var Wap = require(‘wap-sea‘);
    var InviteFriends = require(‘invitefriends‘);
    var ActiveEnd = require(‘activeend‘);

    var GetGrouphb = Wap.Service.extend({
        ClassName: ‘getgrouphb‘,

        /**
         * 模板渲染中心
         */
        tpls: {
            ‘gethbs‘: ‘reqGroupHB renderGroupHB none1‘,  //可以加errorGroupHB处理链异常
            ‘none1‘: ‘reqShareInfo renderShareInfo‘
        },

        /**
         * 事件分发中心
         */
        events:{
            "click share-btn document": ‘shareBtnHandler‘
        },

        /**
         * 初始化参数等
         */
        init: function(){
            this.root = $(‘.get-hbs‘);
        },

        //请求群红包数据  对应模板配置中心的请求
        reqGroupHB: function(){
            var data =  this.Const.STATUS[this.URL_PARAM.activityFlag];
            data && (data.resData = this.URL_PARAM);
            return data;
        },

        //渲染群红包   对应模板配置中心的渲染, 参数 data,tplRender会自动注入进来,你看不到模板。
        renderGroupHB: function(data,tplRender){
            //解析数据源 、数据异常处理
            if(!data){
               return this.Ext.tipNetError();
            }
            if(data.id == 4){
                return  ActiveEnd();
            }

            //模板渲染
            var dom = tplRender(data);
            this.root.find(‘>section‘).append(dom);

            //渲染后处理
            this.root.addClass(data.rootClass).show();
        },

        /**
         * 请求分享信息
         */
        reqShareInfo: function(data){
           if(!data) return;

            var resData = data.resData;
            this.shareParam = {
                activityId: resData.activityId,
                solutionId: resData.solutionId,
                type:  resData.shareInfoType,
                path: this.Const.PRO_PATH + (data.isShareHBs ? this.Const.DO_GET_GROUP_HB : this.Const.DO_GET_HB)
            };
            return this.Dao.queShareInfo({data: this.shareParam});
        },

        /**
         * 渲染分享信息
         */
        renderShareInfo: function(data){
            this.Ext.share($.extend({},this.shareParam,data));
            this.shareParam = null;
        },

        /**
         * 分享按钮事件
         */
        shareBtnHandler: function(e){
            $(e.target).parent().hasClass(‘data-focus-sn‘) ? this.Ext.toFocusSN() : InviteFriends({
                status: this.currentStatus
            });
        }
    });

    new GetGrouphb();

    //埋点
    require.async(‘buriedpoint‘);
});

  

设计理念

当今几乎所有的产品都是经过流水线生产出来的。  先组装A零件,再组装B零件之类。

如果没有流程,没有对零件的参数规范。每个产品的一致性、生产效率就很低,质量也难以保障。

所以界面也需要框架。需要管理流程,需要规范主要方法的IO。

如果说SPA是一台精细的iphone,界面可以比喻成小米。

架构

主要功能

/*模板为空的依赖*/
        tpls: {
            ‘gethbs‘: ‘reqGroupHB renderGroupHB none1‘,  //可以加errorGroupHB处理链异常
            ‘none1‘: ‘reqShareInfo renderShareInfo‘
        },

        /**
         * 有模板的依赖
         */
        tpls: {
            ‘gethbs‘: ‘reqGroupHB renderGroupHB getshare‘,  //可以加errorGroupHB处理链异常
            ‘getshare‘: ‘reqShareInfo renderShareInfo‘
        },

        /**
         * 并行模板链
         */
        tpls: {
            ‘gethbs,getshare‘: ‘reqGroupHB renderGroupHB getshare‘  //可以加errorGroupHB处理链异常
        },

        /**
         * 有显式异常处理的链
         */
        tpls: {
            ‘gethbs‘: ‘reqGroupHB renderGroupHB errorGroupHB getshare‘
        },

        /**
         * 延迟启动链  模板名前加!,表明不会初始化,直到你启动:
         * this.allTpls[‘gethbs‘].once();只会启动一次
         *  this.allTpls[‘gethbs‘].run();启动多次
         */
        tpls: {
            ‘!gethbs‘: ‘reqGroupHB renderGroupHB errorGroupHB getshare‘
        },

        /**
         * 事件分发中心
         */
        events:{
            "click share-btn document": ‘shareBtnHandler‘, //事件绑定到document上,通过自定义属性  share-btn 判断。 class: .开头  id: #开头
            "click .share-btn": ‘shareBtnHandler‘,             //事件绑定到.share-btn
            "click .share-btn .mydiv": ‘shareBtnHandler‘     //事件绑定到.div
        },

源码

  http://10.27.5.1/svn/FED/code/hongbao/year-end   year-end-mvc lib下wap.js

时间: 2024-10-12 15:45:39

自研框架wap.js实践的相关文章

JS设计模式入门和框架中的实践

JS设计模式入门和框架中的实践 在编写JS代码的过程中,运用一定的设计模式可以让我们的代码更加优雅.灵活. 下面笔者就结合诸如redux的subscribe.ES6的class.vue里面的$dispatch.jquery里面的on/off来给大家简单介绍下设计模式在这些库.语法和框架中的使用. 设计模式解决的问题 设计模式并不是很玄乎的知识,很多同学在编写JS代码的时候已经在不经意间用了不少设计模式了. 笔者认为把设计模式单独抽象出来探讨,就和算法中抽象出来冒泡.排序一样,是为了描述一种常用的

从cocos2d-html5中提取出来的,用做前端开发的框架——cc.js

从cocos2d-html5中提取出来的,用做前端开发的框架——cc.js /**************************************************************************** Copyright (c) 2010-2012 cocos2d-x.org Copyright (c) 2008-2010 Ricardo Quesada Copyright (c) 2011 Zynga Inc. http://www.cocos2d-x.org P

轻量级MVVM框架Vue.js快速上手(MVVM、SEO单页面应用)

轻量级MVVM框架Vue.js快速上手(MVVM.SEO单页面应用.×××服务器端渲染.Nuxt.js) 网盘地址:https://pan.baidu.com/s/1LkhepNpGAtRjrxp_CVJNIg 密码: d483备用地址(腾讯微云):https://share.weiyun.com/5tTLqQk 密码:pxezuj Vue.js是一套构建用户界面的轻量级MVVM框架,与其他重量级框架不同的是, Vue.js 的核心库只关注视图层,并且非常容易学习,很容易与其它前端技术或已有的项

JavaScript模块加载框架sea.js 学习一

简单总结sea.js 学习 文件目录结构 /sea/sea.js      下载地址  http://seajs.org/docs/#downloads /sea/jquery-sea.js   下载地址 http://jquery.com/download/ /sea/sea_config.js /sea/home.jsdata.js /sea/data.js 1.html页面代码文件 <style> .ch{height:200px;width:200px;background:#ccc;

atitit. 统计功能框架的最佳实践(1)---- on hibernate criteria

atitit. 统计功能框架的最佳实践(1)---- on hibernate criteria 1. 关键字 1 2. 统计功能框架普通有有些条件选项...一个日期选项..一个日期类型(日,周,月份,年等) 1 3. 元数据的位置,不需要绑定class 1 4. 设置聚合字段... @reduce(" sum(timLen) "),@reduce(" Avg(timLen) ") 2 5. 设置groupby  字段  @GroupBy 2 6. 设置groupb

从零开始,搭建博客系统MVC5+EF6搭建框架(4)上,前后台页面布局页面实现,介绍使用的UI框架以及JS组件

一.博客系统进度回顾以及页面设计 1.1页面设计说明 紧接前面基础基本完成了框架搭建,现在开始设计页面,前台页面设计我是模仿我博客园的风格来设计的,后台是常规的左右布局风格. 1.2前台页面风格 主页面: 技术博客风格: 详情页风格: 详情页留言风格: 1.3后台风格: 表格风格: 博客发布风格: 以上看到的系统页面是目前系统完成的风格,以后页面设计都参考这些页面风格. 二.使用前端web框架以及插件说明 2.1选择前端web框架,我找了很多框架,以前学过自学过bootstrap觉得对于没有前端

Chrome下的语音控制框架MyVoix.js使用篇(四)

在上一篇博文中,我为大家介绍了myvoix.js中的smart learning模块,以及何如使用该功能.(myvoix.js的源码地址会在每一篇文章末尾放出) 文本将拓展 Chrome下的语音控制框架MyVoix.js使用篇(二) 中的实例(没看过的同学请猛戳链接),具象地介绍smart learning模块的使用.在之前的实例中,我们通过语音输入,让 Hello My Voix 标题变化成各种颜色, 并且通过预存指令来增加语音指令的识别率.在本文中将去除预存指令这一块,通过smart lea

开源调度框架Quartz最佳实践

开源调度框架Quartz最佳实践 Quartz是一个Java调度框架,当前的最新版本为2.2.1. 以Quartz 2.2.1版为例,Quartz最佳实践(用于生产系统)总结如下: 1.跳过更新检查Quartz内置了一个“更新检查”特性,因此Quartz项目每次启动后都会检查官网,Quartz是否存在新版本.这个检查是异步的,不影响Quartz项目本身的启动和初始化.可以在Quartz配置文件中,设置org.quartz.scheduler.skipUpdateCheck的属性为true来跳过更

[读书笔记]了不起的node.js+实践(一)

环境的变化带来了技术大跃进,机遇和挑战同时到来.基于我js也没有学,只好赶鸭子上架一起学了.(>﹏<) 1.先读读书 一开始就不知死活地看<深入浅出node.js>,弄得团团转,看完才知道这本书是要一定基础的.在网上搜刮到了41页的<node入门>,自己学着搭建了一个Web应用.并且在刷新成就感后,就抱读<了不起的node.js>.现准备看完这本书后再回读<深入浅出node.js>. 2.搭建环境 运行git上的例程(3次报错) 在官网下载msi