不断学习UI框架的写法
在web开发的过程中,我们会需要用到很多大大小小的插件,比如文本框,下拉树,下拉框等等各种各样的都需要。或许在开发的网页中会用到同一种插件来满足各种各样复杂的业务逻辑,比如简单的一个下拉树,有的地方需要进行拖拽排序,有的地方需要能够进行模糊搜索,有的地方需要权限控制等等。如果仅仅一次被使用到,那么我们在使用的时候,写一个满足需求的插件就可以了。但是当许多地方需要用到时候,你就会发现自己会不停去复制曾经写过的部分代码,随着越用越频繁,复制的量也会越来越大。当其中的一处代码出现bug时,所有复制过该处代码的地方都需要进行同样的维护。本人是坚决抵制复制代码的,这也绝对是代码界的大忌,当我们需要复制代码的时候,我们更需要做的就是深入的思考。比如搭建一个可以不断扩展的结构,那么同一类的控件就会有一套结构,慢慢不断积累,丰富多样的控件组合到了一起所形成的可扩展框架就统称为UI框架,比较常见的有JQuery官方的JQueryUI,另外也有smartUI,easyUI,ExtJs等等。鉴于此,随着使用的插件不对增多,慢慢地我们自己也会希望能够写一套框架来与这些大框架进行较量。
那么组成框架地重要元素必然是一个个独立地插件,当我们在写一个插件时,要怎样才能让它的扩展性能够满足几乎所有地业务逻辑呢?这是一个十分值得思考的问题。
最近,接触到了一个很优秀的下拉树控件zTree,不得不说真的十分优秀。第一次拿来使用,10分钟便可熟悉所有的API,灵活应用。无论是性能,交互还是扩展性,几乎无可挑剔。我曾2次遍历过其中的所有代码,从中受益匪浅,同时也渐渐养成了自己写扩展性插件的一个习惯,当然肯定还有很多不足的地方,毕竟自己的框架写给自己用,用起来不爽就绝对存在不足的地方。下面就来和大家一起探讨下到底有哪些值得我们学习的地方吧:
- 规范的API接口函数和属性配置。
大大降低了API使用的学习成本。比如所有事件类函数统一on开头,每种事件都有对应的onBefore(事件发生前),on(事件发生时),onAfter(事件发生后)三种。属性配置也有一定命名规范,is开头表示“是否是”,has开头表示“是否有/存在”等等。 - 有意义的传参与返回值。
这点也很重要,许多人写js的函数时,喜欢一个函数写到底,没有返回值也没有参数传递,其实这是比较糟糕的。曾经我也不以为然,后来发现其实这样的一个function和把代码写在调用function的地方几乎没有什么差别,唯一的区别顶多就是看着清爽了或者可以被继承下扩展什么的。实际上这样的function,在被不熟悉这段代码的人来使用是很不爽的。多一个有意义的返回值,比如Boolean类型,返回这个函数操作是否有成功执行等等;多几个参数传递进函数,这样才能感觉到这个函数是真的在处理一些特定的数据,而传递的参数也可以让我们更快的理解这个函数做了怎么样的数据处理。 - 错误的英文单词。
俩字:“杜绝”。(每个coder都是艺术家,我们不容许有瑕疵) - 区分private和public。开放出来的API函数最好都相对集中地写在一起,而私有地一些方法地命名尽量区分开来,比如前面加“下划线”等。
- 精简的注释。注释不是写给自己看的,一个产品地代码有80%地可能,开发者和维护者不是同一个人,为了降低成本,作为开发者我们需要给维护者一个可维护地环境。就是在需要地地方给予有效地注释。大大增强可读性。
- css的规范使用。
很多人都忽视css,覆盖和权重问题经常让我们无法得到自己想要的效果。很多时候,觉得只要当前的页面看的过去就认为css没有问题,确实如此。但是写框架类的插件就不能够这样去思考问题,css也会污染全局,仅仅通过特有的类名是不够的。比较好的方法,就是比如我们写一个下拉树控件,下拉树有个基础类是fr-combotree。那么我们所有下拉树的css都统一用.fr-combotree开头,然后一层层向下选择。这样就可以有效的避免互相影响。 - 时间复杂度。
最大只能O(n²),尽量优化成O(n)或者O(logn),超过肯定有问题。 - API文档。
十分重要,任何一个优秀框架的必备品。当我们大致写完一个粗糙的框架后,我们就会希望有一份较为完美的doc文档,方便查阅。推荐ExtJs的JsDuck。 - IE兼容。
框架的兼容性是很多企业级应用开发所选择的重要依据。 - 性能优化。
web端的性能也是需要重视的,不然会严重影响到用户体验。可参考:http://115.29.194.184/?p=311
下面针对IE6及IE6以上的兼容的注意点做一些总结:
- css不要使用伪类。只有a标签可以使用:hover,:link,:active,:visited。
- 使用动画效果务必考虑兼容问题。slideDown slideUp fadeIn fadeOut可以考虑使用。
- new Date函数,只能使用 new Date(年,月,日,时,分,秒)或new Date(毫秒)
- 不要使用String[index]方法,应该使用 String.charAt(index)
- $(‘<form/>’)的写法改为$(‘<form></form>’)
- .text()和.html()的区别使用,不要取DOM的text或者html来给控件赋值,因为text()会合并空格,不准确。
- IE6下字过长显示省略号overflow必须和width连用,可参考:http://115.29.194.184/?p=107
- display: inline-block IE8,有些可以采用display: inline和zoom:1解决
- 图片透明问题。可参考http://115.29.194.184/?p=98
- 只能使用HTML3.2及其以下的实体字符
不断学习UI框架的写法的更多相关文章
- 为兴趣求职:如何学习UI框架,请将你的看法观点写在评论下面
前言:此篇文章是就我女朋友的求职和前端学习经历而写,希望得到UI前辈的热心指点,不胜感激涕零! 地理坐标: 中国,四川,成都 求职经历: 她之前找过两份工作,第一份是金融销售专员,第二份是汽车保险.她 ...
- JGUI源码:从头开始,建一个自己的UI框架(1)
开篇 1.JGUI是为了逼迫自己研究底层点的前端技术而做的框架,之前对web底层实现一直没有深入研究,有了技术瓶颈,痛定思痛从头研究, 2.虽然现在vue技术比较火,但还在发展阶段,暂时先使用JQue ...
- Reactive UI -- 反应式编程UI框架入门学习(一)
推荐一个反应式编程的MVVM跨平台框架. 反应式编程 反应式编程是一种相对于命令式的编程范式,由函数式的组合声明来构建异步数据流.要理解这个概念,可以简单的借助Excel中的单元格函数. 上图中,A1 ...
- Reactive UI -- 反应式编程UI框架入门学习(二)
前文Reactive UI -- 反应式编程UI框架入门学习(一) 介绍了反应式编程的概念和跨平台ReactiveUI框架的简单应用. 本文通过一个简单的小应用更进一步学习ReactiveUI框架的 ...
- 小程序-文章:微信小程序常见的UI框架/组件库总结
ylbtech-小程序-文章:微信小程序常见的UI框架/组件库总结 1.返回顶部 1. 想要开发出一套高质量的小程序,运用框架,组件库是省时省力省心必不可少一部分,随着小程序日渐火爆,各种不同类型的小 ...
- 干!垃圾微软!发布我的Netcore跨平台UI框架 CPF
什么鬼,我的CPF快写好了,你居然也要搞跨平台UI框架?什么Maui? 之前怎么不早说要搞跨平台UI框架呢?看到谷歌搞flutter眼红了?明年年底发布?又搞这种追别人屁股的烂事情. 什么MVU模式? ...
- laya fgui 超简单的UI框架
FairyGUI 超简单的UI框架 Laya使用fgui的超简单UI框架 使用场景:用于使用fgui进行layaUI开发的程序人员 整个框架分为3个模块,共有4个类: FGUIManager :FGU ...
- 前端UI框架和JS类库
一.前端框架库: 1.Zepto.js 地址:http://www.css88.com/doc/zeptojs/ 描述:Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jqu ...
- 基础知识漫谈(2):从设计UI框架开始
说UI能延展出一丢丢的东西来,光java就有swing,swt/jface乃至javafx等等UI toolkit,在桌面上它们甚至都不是主流,在web端又有canvas.svg等等. 基于这些UI工 ...
随机推荐
- 51nod 1172 Partial Sums V2 卡精度的任意模数FFT
卡精度的任意模数fft模板题……这道题随便写个表就能看出规律来(或者说考虑一下实际意义),反正拿到这题之后,很快就会发现他是任意模数fft模板题.然后我就去网上抄了一下板子……我打的是最土的任意模数f ...
- Java八种基本数据类型的大小,以及封装类,自动装箱/拆箱的用法?
参考:http://blog.csdn.net/mazhimazh/article/details/16799925 1. Java八种基本数据类型的大小,以及封装类,自动装箱/拆箱的用法? 原始类型 ...
- JS 中类型鉴别
JS中的基本类型有:数字(Number(NaN,Infinity)),字符串(String),Undefined,Null,Boolean 引用类型有:数组(Array),对象(Object),函数( ...
- Tomcat设置开启时自动访问某个servlet类存在的问题
<servlet> <servlet-name>****</servlet-name> <servlet-class>****</servlet- ...
- LightOJ 1341 - Aladdin and the Flying Carpet 基本因子分解
http://www.lightoj.com/volume_showproblem.php?problem=1341 题意:给你长方形的面积a,边最小为b,问有几种情况. 思路:对a进行素因子分解,再 ...
- 【设计模式】 模式PK:抽象工厂模式VS建造者模式
1.概述 抽象工厂模式实现对产品家族的创建,一个产品家族是这样的一系列产品:具有不同分类维度的产品组合,采用抽象工厂模式则是不需要关心构建过程,只关心什么产品由什么工厂生产即可.而建造者模式则是要求按 ...
- 【C++ STL】Map和Multimap
1.结构 Map和multimap将key/value pair(键值/实值 队组)当作元素,进行管理.他们根据key的排序准则将元素排序.multimap允许重复元素,map不允许. 元素要求: k ...
- 【HDU】2222 Keywords Search
[算法]AC自动机 [题解]本题注意题意是多少关键字能匹配而不是能匹配多少次,以及可能有重复单词. 询问时AC自动机与KMP最大的区别是因为建立了trie,所以对于目标串T与自动机串是否匹配只需要直接 ...
- bzoj 2733 平衡树启发式合并
首先对于一个连通块中,询问我们可以直接用平衡树来求出排名,那么我们可以用并查集来维护各个块中的连通情况,对于合并两个平衡树,我们可以暴力的将size小的平衡树中的所有节点删掉,然后加入大的平衡树中,因 ...
- bzoj 3343 分块
因为询问比较少,所以我们可以将n个数分成sqrt(n)个块,每个块用一颗bst存一下,然后对于修改l,r,我们将l,r区间中整块的直接在bst上打一个标签,对于不是整块的我们直接暴力修改,对于询问l, ...