Amaze UI 使用 JSHint 和 JSCS 控制代码质量。
(部分直接使用第三方库的代码未通过质量控制工具检测。)
为提高代码执行效率,为二者兼容提供可能,在使用 jQuery / Zepto.js 时做以下约定:
$ 开头;slideUp/Down() fadeIn/fadeOut() 等方法;animate() 方法;问题:
. 语法,只能使用 : 语法。var 模式声明变量:更容易维护,比如要删除第一个变量或者最后一个变量时,多 var 模式直接删除即可,单 var 还要去修改别的行(for 循环例外);Valid
var x = 1;
var y = 2;
for (var i = 0, j = arr.length; i < j; i++) {
}Invalid
var x = 1,
y = 2;[a-z\d\-],并以英文字母开头am 命名空间,如 data-am-triggeramui 命名空间名,使用 : 连接(Zepto 不支持使用 . 链接的自定义事件),如 .trigger('open:modal:amui')UPPERCASE_WORDcamelNameCamelNamedata-am-{组件名},如 data-am-modal、data-am-navbar-qrcodedata-am-modal="{key1: 'val1', key2: false}",core.js 中增加一个专门解析参数的函数{自定义事件名}:{组件名}:{后缀},Zepto 不支持 . 分隔的自定义事件语法,官方示例中使用 : 分隔,如 closed:modal:amui。Zepto 中没有 event.namespace,这样的命名方式只用于清晰区分不同模块的自定义事件。另外,按照 Zepto 官方示例,应该写成 amui:modal:closed,为跟 jQuery 的写法统一,颠倒顺序书写。{事件名}.{组件名}.{命名空间},如 $(document).on('click.modal.amui',...。$(document).off('.amui',...$(document).off('.modal.amui',...通过接口规范,统一模块对外接口的命名,形成一致的编写习惯。
规则:
| 常用词 | 说明 |
|---|---|
| options | 表示选项,与 jQuery 社区保持一致,不要用 config, opts 等 |
| active | 表示当前,不要用 current 等 |
| index | 表示索引,不要用 idx 等 |
| trigger | 触点元素 |
| triggerType | 触发类型、方式 |
| context | 表示传入的 this 对象 |
| object | 推荐写全,不推荐简写为 o, obj 等 |
| element | 推荐写全,不推荐简写为 el, elem 等 |
| length | 不要写成 len, l |
| prev | previous 的缩写 |
| next | next 下一个 |
| constructor | 不能写成 ctor |
| easing | 示动画平滑函数 |
| min | minimize 的缩写 |
| max | maximize 的缩写 |
| DOM | 不要写成 dom, Dom |
| .hbs | 使用 hbs 后缀表示模版 |
| btn | button 的缩写 |
| link | 超链接 |
| title | 主要文本 |
| img | 图片路径(img标签src属性) |
| dataset | html5 data-xxx 数据接口 |
| theme | 主题 |
| className | 类名 |
| classNameSpace | class 命名空间 |
总之,注释的目的是: 提高代码的可读性,从而提高代码的可维护性。
// Using loop is more efficient than `rest = slice.call(arguments, 1)`.
for (i = 1, len = arguments.length; i < len; i++) {
rest[i - 1] = arguments[i];
}init: function(selector, context, rootjQuery) {
var match, elem, ret, doc;
// Handle $(""), $(null), or $(undefined)
if ( !selector ) {
...
}
// Handle $(DOMElement)
if ( selector.nodeType ) {
...
}
// The body element only exists once, optimize finding it
if ( typeof selector === "string" ) {
...
}
}// Inspired by https://github.com/jquery/jquery/blob/master/src/core.js
function ready() {
...
}// 注释 与 /* 注释 */。每个组件必须有 README.md 文件,用来描述组件的基本情况。
# 模块名称 ----- 该模块的概要介绍。 ------ ## 使用说明 如何使用该模块,可以根据组件的具体特征,合理组织。 ## API 需要提供 API 说明,属性、方法、事件等。 ## 使用示例
记录组件的变更,最好和 issues 进行关联。请阅读历史记录书写规范。
Amaze UI 的编码规范参考了社区里一些先行者的做法,在此致谢!
