在web开发的过程中,我们会需要用到很多大大小小的插件,比如文本框,下拉树,下拉框等等各种各样的都需要。或许在开发的网页中会用到同一种插件来满足各种各样复杂的业务逻辑,比如简单的一个下拉树,有的地方需要进行拖拽排序,有的地方需要能够进行模糊搜索,有的地方需要权限控制等等。如果仅仅一次被使用到,那么我们在使用的时候,写一个满足需求的插件就可以了。但是当许多地方需要用到时候,你就会发现自己会不停去复制曾经写过的部分代码,随着越用越频繁,复制的量也会越来越大。当其中的一处代码出现bug时,所有复制过该处代码的地方都需要进行同样的维护。本人是坚决抵制复制代码的,这也绝对是代码界的大忌,当我们需要复制代码的时候,我们更需要做的就是深入的思考。比如搭建一个可以不断扩展的结构,那么同一类的控件就会有一套结构,慢慢不断积累,丰富多样的控件组合到了一起所形成的可扩展框架就统称为UI框架,比较常见的有JQuery官方的JQueryUI,另外也有smartUI,easyUI,ExtJs等等。鉴于此,随着使用的插件不对增多,慢慢地我们自己也会希望能够写一套框架来与这些大框架进行较量。

那么组成框架地重要元素必然是一个个独立地插件,当我们在写一个插件时,要怎样才能让它的扩展性能够满足几乎所有地业务逻辑呢?这是一个十分值得思考的问题。

最近,接触到了一个很优秀的下拉树控件zTree,不得不说真的十分优秀。第一次拿来使用,10分钟便可熟悉所有的API,灵活应用。无论是性能,交互还是扩展性,几乎无可挑剔。我曾2次遍历过其中的所有代码,从中受益匪浅,同时也渐渐养成了自己写扩展性插件的一个习惯,当然肯定还有很多不足的地方,毕竟自己的框架写给自己用,用起来不爽就绝对存在不足的地方。下面就来和大家一起探讨下到底有哪些值得我们学习的地方吧:

  1. 规范的API接口函数和属性配置。
    大大降低了API使用的学习成本。比如所有事件类函数统一on开头,每种事件都有对应的onBefore(事件发生前),on(事件发生时),onAfter(事件发生后)三种。属性配置也有一定命名规范,is开头表示“是否是”,has开头表示“是否有/存在”等等。
  2. 有意义的传参与返回值。
    这点也很重要,许多人写js的函数时,喜欢一个函数写到底,没有返回值也没有参数传递,其实这是比较糟糕的。曾经我也不以为然,后来发现其实这样的一个function和把代码写在调用function的地方几乎没有什么差别,唯一的区别顶多就是看着清爽了或者可以被继承下扩展什么的。实际上这样的function,在被不熟悉这段代码的人来使用是很不爽的。多一个有意义的返回值,比如Boolean类型,返回这个函数操作是否有成功执行等等;多几个参数传递进函数,这样才能感觉到这个函数是真的在处理一些特定的数据,而传递的参数也可以让我们更快的理解这个函数做了怎么样的数据处理。
  3. 错误的英文单词。
    俩字:“杜绝”。(每个coder都是艺术家,我们不容许有瑕疵)
  4. 区分private和public。开放出来的API函数最好都相对集中地写在一起,而私有地一些方法地命名尽量区分开来,比如前面加“下划线”等。
  5. 精简的注释。注释不是写给自己看的,一个产品地代码有80%地可能,开发者和维护者不是同一个人,为了降低成本,作为开发者我们需要给维护者一个可维护地环境。就是在需要地地方给予有效地注释。大大增强可读性。
  6. css的规范使用。
    很多人都忽视css,覆盖和权重问题经常让我们无法得到自己想要的效果。很多时候,觉得只要当前的页面看的过去就认为css没有问题,确实如此。但是写框架类的插件就不能够这样去思考问题,css也会污染全局,仅仅通过特有的类名是不够的。比较好的方法,就是比如我们写一个下拉树控件,下拉树有个基础类是fr-combotree。那么我们所有下拉树的css都统一用.fr-combotree开头,然后一层层向下选择。这样就可以有效的避免互相影响。
  7. 时间复杂度。
    最大只能O(n²),尽量优化成O(n)或者O(logn),超过肯定有问题。
  8. API文档。
    十分重要,任何一个优秀框架的必备品。当我们大致写完一个粗糙的框架后,我们就会希望有一份较为完美的doc文档,方便查阅。推荐ExtJs的JsDuck。
  9. IE兼容。
    框架的兼容性是很多企业级应用开发所选择的重要依据。
  10. 性能优化。
    web端的性能也是需要重视的,不然会严重影响到用户体验。可参考:http://115.29.194.184/?p=311

下面针对IE6及IE6以上的兼容的注意点做一些总结:

    1. css不要使用伪类。只有a标签可以使用:hover,:link,:active,:visited。
    2. 使用动画效果务必考虑兼容问题。slideDown slideUp fadeIn fadeOut可以考虑使用。
    3. new Date函数,只能使用 new Date(年,月,日,时,分,秒)或new Date(毫秒)
    4. 不要使用String[index]方法,应该使用 String.charAt(index)
    5. $(‘<form/>’)的写法改为$(‘<form></form>’)
    6. .text()和.html()的区别使用,不要取DOM的text或者html来给控件赋值,因为text()会合并空格,不准确。
    7. IE6下字过长显示省略号overflow必须和width连用,可参考:http://115.29.194.184/?p=107
    8. display: inline-block IE8,有些可以采用display: inline和zoom:1解决
    9. 图片透明问题。可参考http://115.29.194.184/?p=98
    10. 只能使用HTML3.2及其以下的实体字符

不断学习UI框架的写法的更多相关文章

  1. 为兴趣求职:如何学习UI框架,请将你的看法观点写在评论下面

    前言:此篇文章是就我女朋友的求职和前端学习经历而写,希望得到UI前辈的热心指点,不胜感激涕零! 地理坐标: 中国,四川,成都 求职经历: 她之前找过两份工作,第一份是金融销售专员,第二份是汽车保险.她 ...

  2. JGUI源码:从头开始,建一个自己的UI框架(1)

    开篇 1.JGUI是为了逼迫自己研究底层点的前端技术而做的框架,之前对web底层实现一直没有深入研究,有了技术瓶颈,痛定思痛从头研究, 2.虽然现在vue技术比较火,但还在发展阶段,暂时先使用JQue ...

  3. Reactive UI -- 反应式编程UI框架入门学习(一)

    推荐一个反应式编程的MVVM跨平台框架. 反应式编程 反应式编程是一种相对于命令式的编程范式,由函数式的组合声明来构建异步数据流.要理解这个概念,可以简单的借助Excel中的单元格函数. 上图中,A1 ...

  4. Reactive UI -- 反应式编程UI框架入门学习(二)

    前文Reactive UI -- 反应式编程UI框架入门学习(一)  介绍了反应式编程的概念和跨平台ReactiveUI框架的简单应用. 本文通过一个简单的小应用更进一步学习ReactiveUI框架的 ...

  5. 小程序-文章:微信小程序常见的UI框架/组件库总结

    ylbtech-小程序-文章:微信小程序常见的UI框架/组件库总结 1.返回顶部 1. 想要开发出一套高质量的小程序,运用框架,组件库是省时省力省心必不可少一部分,随着小程序日渐火爆,各种不同类型的小 ...

  6. 干!垃圾微软!发布我的Netcore跨平台UI框架 CPF

    什么鬼,我的CPF快写好了,你居然也要搞跨平台UI框架?什么Maui? 之前怎么不早说要搞跨平台UI框架呢?看到谷歌搞flutter眼红了?明年年底发布?又搞这种追别人屁股的烂事情. 什么MVU模式? ...

  7. laya fgui 超简单的UI框架

    FairyGUI 超简单的UI框架 Laya使用fgui的超简单UI框架 使用场景:用于使用fgui进行layaUI开发的程序人员 整个框架分为3个模块,共有4个类: FGUIManager :FGU ...

  8. 前端UI框架和JS类库

    一.前端框架库: 1.Zepto.js 地址:http://www.css88.com/doc/zeptojs/ 描述:Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jqu ...

  9. 基础知识漫谈(2):从设计UI框架开始

    说UI能延展出一丢丢的东西来,光java就有swing,swt/jface乃至javafx等等UI toolkit,在桌面上它们甚至都不是主流,在web端又有canvas.svg等等. 基于这些UI工 ...

随机推荐

  1. ucenter搭建

    使用xftp传到虚拟机.解压[root@ygy130 ~]# unzip -o -d ./Ucenter_1.6 UCenter_1.6.0_SC_UTF8.zip [root@ygy130 ~]# ...

  2. Linux环境下用Weblogic发布项目【一】 -- 安装Weblogic

     一.Weblogic安装系统环境: 1.前提条件: a.在笔记本[Windows7]上安装远程连接Linux软件:F-Secure SSH File Transfer Trial[简写为:FSSH] ...

  3. POJ 3421分解质因数

    X-factor Chains Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7375   Accepted: 2340 D ...

  4. [LeetCode] Merge Interval系列,题:Insert Interval,Merge Intervals

    Interval的合并时比较常见的一类题目,网上的Amazon面经上也有面试这道题的记录.这里以LeetCode上的例题做练习. Merge Intervals Given a collection ...

  5. 2015/9/15 Python基础(12):模块和包

    模块是用来组织 Python 代码的方法,而包则是用来组织模块的. 当代码量很大时,我们一般会把代码分成几个有组织的代码段,然后每个代码段之间有一定的联系.代码单之间是共享的,所以Python允许调入 ...

  6. Item 29 优先考虑类型安全的异构容器

    集合API展示了泛型的一般用法.但是它们(Set,HashMap,Map)限制了每个容器只能有固定数目的类型参数.     比如Set集合,HashMap集合: import java.util.Ha ...

  7. 基数排序——尚未补完的坑QAQ

    基数排序复杂度是(n+b)logn/logb 我们找一个基数 每次处理一部分位 从低位到高位处理 t是出现次数 s是这个桶管辖的起点 然后就可以写了 不过我这里是指针版的 有点难看 #include& ...

  8. windows+nexus+maven环境搭建(转)

    windows nexus环境搭建 1.下载nexus 版本为 nexus-2.11.4-01-bundle 下载地址 这里写链接内容 2.将下载好的文件放到D盘进行解压 3.解压后目录结构 nexu ...

  9. nodejs安装express以后,使用express显示不是内部或外部命令

    1.问题描述 在命令窗口通过npm install -g express 安装express以后,通过express -e express新建工程失败,提示express不是内部或外部命令 2.解决方 ...

  10. Python学习笔记 - day12 - Python操作NoSQL

    NoSQL(非关系型数据库) NoSQL,指的是非关系型的数据库.NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称.用于超大规模数据的存储.(例如 ...