自研框架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
},
源码
自研框架wap.js实践的更多相关文章
- 基于 Vue.js 之 iView UI 框架非工程化实践记要 使用 Newtonsoft.Json 操作 JSON 字符串 基于.net core实现项目自动编译、并生成nuget包 webpack + vue 在dev和production模式下的小小区别 这样入门asp.net core 之 静态文件 这样入门asp.net core,如何
基于 Vue.js 之 iView UI 框架非工程化实践记要 像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引 ...
- 从cocos2d-html5中提取出来的,用做前端开发的框架——cc.js
从cocos2d-html5中提取出来的,用做前端开发的框架——cc.js /************************************************************* ...
- H5案例分享:JS手势框架 —— Hammer.js
JS手势框架 -- Hammer.js 一.hammer.js简介 hammerJS是一个开源的,轻量级的触屏设备javascript手势库,它可以在不需要依赖其他东西的情况下识别触摸,鼠标事件.允许 ...
- 从零开始,搭建博客系统MVC5+EF6搭建框架(4)上,前后台页面布局页面实现,介绍使用的UI框架以及JS组件
一.博客系统进度回顾以及页面设计 1.1页面设计说明 紧接前面基础基本完成了框架搭建,现在开始设计页面,前台页面设计我是模仿我博客园的风格来设计的,后台是常规的左右布局风格. 1.2前台页面风格 主页 ...
- atitit. 统计功能框架的最佳实践(1)---- on hibernate criteria
atitit. 统计功能框架的最佳实践(1)---- on hibernate criteria 1. 关键字 1 2. 统计功能框架普通有有些条件选项...一个日期选项..一个日期类型(日,周,月份 ...
- 开源调度框架Quartz最佳实践
开源调度框架Quartz最佳实践 Quartz是一个Java调度框架,当前的最新版本为2.2.1. 以Quartz 2.2.1版为例,Quartz最佳实践(用于生产系统)总结如下: 1.跳过更新检查Q ...
- Chrome下的语音控制框架MyVoix.js使用篇(四)
在上一篇博文中,我为大家介绍了myvoix.js中的smart learning模块,以及何如使用该功能.(myvoix.js的源码地址会在每一篇文章末尾放出) 文本将拓展 Chrome下的语音控制框 ...
- require.js实践
ASP.NET MVC应用require.js实践 这里有更好的阅读体验和及时的更新:http://pchou.info/javascript/asp.net/2013/11/10/527f6ec41 ...
- 一款很便捷很实用的框架——vue.js
Hello,大家好!今天给大家带来一款十分好用的框架--vue.js! Vue.js是一套构建用户界面的渐进式框架.它 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标是通过尽可能简单的 ...
随机推荐
- 爬虫入门系列(三):用 requests 构建知乎 API
爬虫入门系列目录: 爬虫入门系列(一):快速理解HTTP协议 爬虫入门系列(二):优雅的HTTP库requests 爬虫入门系列(三):用 requests 构建知乎 API 在爬虫系列文章 优雅的H ...
- NuGet(Nuget Packages)
Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展.在使用Visual Studio开发基于.NET Framework的应用时,Nuget能把在项目中添加.移除和更新引 ...
- Linux - 死锁现象
一.死锁的概念: 1.死锁的现象描述: 在很多应用中,需要一个进程排他性的访问若干种资源而不是一种.例如,两个进程准备分别将扫描的文档记录到CD上.进程A请求使用扫描仪, 并被授权使用.但进程B首先请 ...
- nginx源码分析——http模块
源码:nginx 1.12.0 一.nginx http模块简介 由于nginx的性能优势,现在已经有越来越多的单位.个人采用nginx或者openresty. ...
- 玩转SSH端口转发
SSH有三种端口转发模式,本地端口转发(Local Port Forwarding),**远程端口转发(Local Port Forwarding)**以及**动态端口转发(Dynamic Port ...
- 使用Eclipse Memory Analyzer Tool(MAT)分析线上故障(一) - 视图&功能篇
Eclipse Memory Analyzer Tool(MAT)相关文章目录: 使用Eclipse Memory Analyzer Tool(MAT)分析线上故障(一) - 视图&功能篇 使 ...
- VopSdk一个高逼格微信公众号开发SDK
一.我们的目标 分离基础参数和业务参数. 具有高重用和扩展性. 轻量级. 二.实现目标 (一)分离基础参数和业务参数 仔细分析所有接口,抽离出每个模块接口的公共参数. A.针对微信公众号所有接口分析( ...
- linux下实时监测命令运行结果工具:watch
watch是一个非常实用的工具,可以实时监测一些经常变化的命令结果或文件,而不需要手动一次一次的输入命令. 语法: watch [选项] [命令参数] 选项: -n :指定刷新间隔时间,默认2秒. - ...
- VM VirtrualBox 安装centos6.5后的网络设置
小白学习linux(一) 本文只是介绍VirtrualBox安装centos完成后的网络设置: 每次用虚拟机装完centos后,捣鼓半天才能上网.熟话说的好,好记性不如烂笔头,写个随笔记录下设置过程, ...
- 让Unity的Inspector面板支持字符限制(restrict)功能
今天在优化红点组件,笔者打算将红点id由10进制改为16进制处理,就打算将红点id字段由uint类型改成string类型,用于填写16进制的字符(因为在Inspector面板里,uint/int类型字 ...