如何规划一个前端组件:单&复选按钮
一个自定义的单选和复选按钮,这其实就是一个前端组件。为什么它不被称为模块呢?因为它不处理数据,没有业务逻辑,它只是一个事实上的样式,在操作交互上,是一个开关类的东西。在规模上,几乎已经是一种最小粒度的组件。在视图层面上,它的渲染是独立于业务数据的。它是一个独立展示和交互的最小单元,所以非常的易于测试。这是它的静态的展现和特征。
在外部,它要有一些接口暴露出来,以供外部调用。这样可以适合多种多样的业务环境,而且这些接口最好是写在组件之外的配置config文件中,以回调函数的形式存在。当然,这样的结构有些过于偏向兼容性了,而且在结构上会复杂些。
它的生命周期一般来讲,会有:
1,初始化;
2,加载必要资源;
3,渲染前检查;
4,内部DOM渲染;
5,绑定事件监听;
6,添加到BODY中;
7,获取和更新数据;
8,删除事件监听、数据;
9,从页面中删除所有DOM节点;
10,删除对象;
在它的各个阶段,都应该有相应的方法,去启动相应的步骤,如果某一步返回false,则可以判断是哪一步出了问题,这样便于对组件整个生命周期进行内部控制和管理。
它的目录结构大体是这样:
www/component/customCheck
|--customCheck.css
|--customCheck.js
|--customCheck.tpl
|--customCheck.temp.data
|--test //测试
|--|--test.js
|--|--test.data
在调用上,一般采用实例化之后,以匿名函数传参的形式,
customCheck( $('#checkDiv'), {
'id':'checkId',
'class':'checkClass'
});
在调用的时候只是这么写就OK,但在此组件的整个生命周期之中,它的启动过程至少是这样,伪代码:
//1,2
var _customCheck = new customCheck();
_customCheck.beforeInit('init',function(){
//3,4
if( cssJs.load() ){
return false;
}
if( htmlDom.load() ){
return false;
}
_customCheck.start();
});
//5,6,7
_customCheck.afterInit('load',function(){
eventList.forEach(function(){
})
.getData( dataUrl )
.appendTo( DomEvent );
});
大家听到这里可能会有些晕,但是晕也要听,听不懂也要听。学习就是这样,必须要有一种啃硬骨头,打硬仗的勇气和决心。有同学可能会认为,老尚这里讲的不清楚,所以 我听不懂。那我告诉你,培训班根本就不会讲这些,这个层面上我不客气的说,那些培训班老师未必有我理解的深入。而那些理解前端组件生命周期的人,你指望他们像培训班老师那样给你讲到明明白白,那是不可能的。所以,先听,听不懂硬听。听了再说,以后慢慢理解。就这样,咱们继续进行啊。
- (四) 如何将socket设置为非阻塞模式
- Scala Collections集合的几个重要概念
- (五)如何编写高性能日志
- Scala之偏函数Partial Function
- (六)关于网络编程的一些实用技巧和细节
- 快学Scala习题答案汇总
- (八)高性能服务器架构设计总结1——以flamigo服务器代码为例
- (八)高性能服务器架构设计总结2——以flamigo服务器代码为例
- Scala集合练习题
- 机器学习(10)之趣味案例理解朴素贝叶斯
- Spart DataSet数据集
- (八)高性能服务器架构设计总结3——以flamigo服务器代码为例
- (八)高性能服务器架构设计总结4——以flamigo服务器代码为例
- SQL员工部门表综合查询60题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 面试官最爱问的 11道 Redis 面试题,我替你整理好了
- 打卡群刷题总结0929——计算各个位数不同的数字个数
- codeforces 1423K(数学+差分数组预处理)
- 电影大片里的代码究竟有多高级?
- 打卡群刷题总结0930——最大整除子集
- 机器学习中的常用编码方式(一)
- leetcode题目之1、2---两数相加
- pyplot做PR-curve
- Go - flag:命令行flags解析
- 走进Network Namespace学会容器网络调试
- 打卡群刷题总结1001——组合总和 Ⅳ
- Oracle数据字典
- 打卡群2刷题总结1002——搜索插入位置
- React太劝退,通过anu学合成事件
- Oracle内存结构和后台进程