【翻译】EXTJS 编码风格指南与实例
原文:EXTJS Code Style Guide with examples
Ext JS风格指南:
- 熟知的且易于学习
- 快速开发,易于调试,轻松部署
- 组织良好、可扩展和可维护
Ext JS应用程序的命名约定:
1、类
类名应使用驼峰命名(CamelCased)。
不要使用下划线,或其他连接字符。
如:MyCustomClass
不是通过Sencha分发的类,永远不要使用Ext作为顶层命名空间。
在类名中,应至少使用一次点号来划分命名空间。
如TopLevelNamespace.MyClassName
顶层命名空间和实际类名应使用驼峰命名,而其他则应使用小写字母。
//好的类名
如:TopNamespace.midlevelnamespace.MyCustomClass
如:MyModule.view.UserGrid
//坏的类名
eg:MyCompany.useful_util.Debug_Toolbar
2、使用命名空间来分组相关的组件
命名空间应基于目录结构构建。目录应基于功能化的业务组件将组件分组为逻辑模块。这意味着维护用户可根据命名空间和组件啦管理组件:
目录结构:
MyModule/controller/UserController.js
MyModule/store/UserStore.js
MyModule/model/UserModel.js
MyModule/view/UserGrid.js
MyModule/view/UserForm.js
类名:
MyModule.controller.UserController
MyModule.store.UserStore
MyModule.model.UserModel
MyModule.view.UserGrid
MyModule.view.UserForm
3、Ext JS的组件和控件
所有组件都应使用3个小写字母作为前缀,之后适当使用每一个单词(如txtFirstName, cboDisplay, dtmStartDate)。
Form Panel = frm
Text Field = txt
Combo Box = cbo
Button = btn
Label = lbl
Check Box = chk
Date Field = dtm
Number Field = num
Grid = grd
Tab Panel = tab
Tab Page = pge
Panel = pnl
Container = con
Toolbar = tlb
Paging Toolbar = pgt
每一个Sencha组件都应当将itemId设置为控件的名称。使用驼峰命名来为itemId命名(如txtFirstName)。
如:itemId : txtFirstName
4、变量、常量、私有变量、属性和方法:
A. 变量应总是使用驼峰命名。
如:
var isGoodName;
var base64Encoder;
var thisIsMyName;
var base64Encoder
B. 常量应使用大写字母
如:
var SALARY = 1000;
var MAX_COUNT = 10;
var URL = "http://www.mydomain.net/";
C. 私有变量应以“_”开始
如: var _modelRecord;
var _get = Ext.data.Model.prototype.get;
var _set = Ext.data.Model.prototype.set;
var val = _get.apply(this, arguments); // private variable used in thisway
D. 属性应总是使用驼峰命名。静态属性应使用大写字母。
如1:
Ext.MessageBox.YES = "Yes";
MyCompany.alien.Math.PI = "4.13";
如2:
/**@property {String} MASK_MESSAGE_SAVING_FORM Mask message for Saving form*/
MASK_MESSAGE_SAVING_FORM: 'Saving form data, please wait...',
E. 方法:方法应总是使用驼峰命名。这也适用于首字母缩写词。
如:
可接受的方法名称:
encodeUsingMd5()
getExtComponentByReference()
getHtml() instead of getHTML()
getJsonResponse() instead of getJSONResponse()
parseXmlContent() instead of parseXMLContent()
5. 公共基类要加注释文档
一个组件如何被用来作为其他组件的共同祖先,它就应当被放置咋爱common目录。
如:
/**
* @class Common.CommonFunctions
* @author Sencha User
*
* 该文件包含公共功能,可被用于任何Ext JS应用程序
*
*
*/
Ext.define('Common.CommonFunctions', {});
6、为方法添加注释文档
如:
/**
* This will return an ExtJs component based on a reference
* to that component. This reference can either be the component
* itself or the comopnent's id.
* @param {String/Object} ref A reference to an ExtJs component, can either be the the components id or the component itself
* @return {Object}
*/
function getExtComponentByReference(ref){
var component;
if (typeof ref === 'string'){
component = Ext.getCmp(ref);
} else if (typeof ref === 'object'){
component = ref;
} else {
return false;
}
return component;
}
7. 为控制器的方法添加注释文档
如:
/**
* Function to provide logic to validate a BPM form prior to submitting it.
* Override this method in your own custom controller to add form specific submit validation.
* Note: By default this function will simply call form.isValid() to determine if form is valid.
*
* @returns {boolean} If the form is valid for submit or not
*/
isBPMFormValidForSubmit: function(){
return this.getBpmForm().isValid();
},
8、全局引用:
// 注意: 要指定他们使用的地方
var globalPreferedMode = false;
var globalUserPreferenceArr = []; // Array used to compare with preference cols of trade grid while applying preferences
9、要为组件和控制器内为任何用户定义的配置项添加注释文档
如:
/**
* @cfg {Number} headerColumns
* The total number of columns to create in the table for this layout. If not specified, all Components added
* to this layout will be rendered into a single row using one column per Component.
*/
headerColumns: 6,
/**
* @cfg {Object/Object[]} headerFields
* A single item, or an array of child Components to be added to this container.
*/
headerFields: [],
/** @readonly */
isWindow: true,
/** @cfg {String} title The default window's title */
title: 'Title Here',
/** @cfg {Object} bottomBar The default config for the bottom bar */
bottomBar: {
enabled: true,
height: 50,
resizable: false
},
/**
* @cfg {String} store (required)
* The key of the store to be used to back this form.
*/
store: ''
10、最佳实践:使用scope(作用域)
如:
getPeople :function(people){
Ext.Ajax.request({
url: 'people.php',
method : 'GET',
params: {
id: 1,
name:'test'
},
scope: this,
success: this.onAfterGetPeople
});
},
onAfterGetPeople: function(response){
//Dp some stuff
var jsonData = Ext.decode(response.responseText);
// process server response here
this.getDepartments(jsonData,departments);
},
getDepartments : function(departments){
Ext.Ajax.request({
url: 'departments.php',
method : 'GET',
params: departments,
scope: this,
success: this.onAfterGetDepartments
});
},
onAfterGetDepartments : function(response){
//DO more work
}
11、最佳实践:正确缩进和优化代码
如:
segmentContactModule :function(segButton,button,pressed){
var contactListStore = Ext.getStore('ContactListStore').
contactView = this.getContactView(),
contactList = contactView.query('#listContactItemsId')[0],
contactDetailView= this.getContactDetailView(),
selectedRecords = contactList.getSelection(),
buttonText = button.getText();
contactListStore.clearFilter();
if(pressed) {
if(contactListStore.getCount() == 0){
contactDetailVIew.setActiveItem(0);
}else{
if(selectedRecords.length>0){
this.contactListItemEvent(null,null,null,selectedRecords[0]);
}else{
contactDetailView.setActiveItem(0);
}
}
}
else{
if(selectedRecords.lenght>0){
this.contactListItemEvent(null,null,null,selectedRecords[0]);
}
}
} // end of method
12、最佳实践:总是让代码具有可读性
如:
if(!this.isReadable()){
this.refactorWith({
properIndentation : true,
optimizedCodeReadability: true
});
}else{
this.beHappy();
}
13、最佳实践:方法的返回类型
eg:
testSomeVal : function(someVal){
return (someVal <=2); //添加括号提高可读性
}
14、最佳实践:
延迟初始化 - 只在必要时添加条目或视图
延迟渲染 - 节省浏览器时间
重用某些东西 - 节省开发时间
15、最佳实践 : 针对this的两个规则
当一个函数通过var引用来执行时,默认的执行上下文(this)是window
如:
var myFn = function(){
console.log(this);
};
myFn();
当一个函数通过一个对象的键值来执行时,执行上下文(this)是object
如:
var member = {
name: 'Eric',
getName: function(){
console.log(this);
}
};
member.getName();
混合:
如:
var getName = member.getName;
getName();
如:
var member1 = {
name: 'Eric',
getName: function(){
console.log(this);
}
};
var member2 = {
name: 'Bob',
getName: member1.getName
};
member2.getName();
【翻译】EXTJS 编码风格指南与实例的更多相关文章
- PEP8中文版 -- Python编码风格指南
Python部落组织翻译, 禁止转载 目录 缩进 制表符还是空格? 行的最大长度 空行 源文件编码 导入 无法忍受的 其 ...
- Objective-C 编码风格指南
本文转自:[Objective-C 编码风格指南 | www.samirchen.com][2] ## 背景 保证自己的代码遵循团队统一的编码规范是一个码农的基本节操,能够进入一个有统一编码规范的团队 ...
- Python PEP-8编码风格指南中文版
#PEP 8 – Python编码风格指南 PEP: 8 Title: Style Guide for Python Code Author: Guido van Rossum , Barry War ...
- (转)PEP 8——Python编码风格指南
PEP 8——Python编码风格指南标签(空格分隔): Python PEP8 编码规范原文:https://lizhe2004.gitbooks.io/code-style-guideline-c ...
- R 语言编码风格指南
R 语言是一门主要用于统计计算和绘图的高级编程语言.这份 R 语言编码风格指南旨在让我们的 R代码更容易阅读.分享和检查.以下规则系与 Google 的 R 用户群体协同设计而成. 概要: R编码风格 ...
- 来自 Google 的 R 语言编码风格指南
来自 Google 的 R 语言编码风格指南R 语言是一门主要用于统计计算和绘图的高级编程语言. 这份 R 语言编码风格指南旨在让我们的 R 代码更容易阅读.分享和检查. 以下规则系与 Google ...
- 【翻译】Ext JS——高效的编码风格指南
原文:ExtJS - Efficient coding style guide 作者:Raja 切勿使用"new"关键字:在Ext JS中,使用"new"关键字 ...
- Python 编码风格指南
原文:http://python.jobbole.com/84618/ 本文超出 PEP8 的范畴以涵盖我认为优秀的 Python 风格.本文虽然坚持己见,却不偏执.不仅仅涉及语法.模块布局等问题,同 ...
- JavaScript编码风格指南(中文版)
前言: 程序语言的编码风格对于一个长期维护的软件非常重要,特别是在团队协作中.如果一个团队使用统一规范的编码分风格,可以提高团队的协作水平和工作效率.编程风格指南的核心是基本的格式化规则,这些规则决定 ...
随机推荐
- PHP AJAX 简介
AJAX 简介 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. AJAX 是什么? AJAX = Asynchronous JavaScript and XML. AJAX ...
- Dynamics CRM2016 Web Api之查询查找字段的相关属性
之前有篇博文介绍了如何获取查找字段的name值(跳转),本篇在此基础上再延伸下,实现的效果类似于EntityReference,可以取到查找字段的id,name,localname. 这里我以客户实体 ...
- Jeff Atwood倾情推荐——程序员必读之书
英文版:<Code Complete 2>中文版:<代码大全(第二版)>作者:Steve McConnell译者:金戈 汤凌 陈硕 张菲出版社:电子工业出版社出版日期:2 ...
- 豌豆夹Redis解决方案Codis源码剖析:Dashboard
豌豆夹Redis解决方案Codis源码剖析:Dashboard 1.不只是Dashboard 虽然名字叫Dashboard,但它在Codis中的作用却不可小觑.它不仅仅是Dashboard管理页面,更 ...
- Openstack: MP-BIOS bug: 8254 timer not connected to IO-APIC
Issue: After you import an linux image into openstack and run an instance of it, you may find that t ...
- 1、win10下连接本地系统上的Linux操作系统(分别以Nat方式和桥接模式实现)
1.win10下连接本地系统上的Linux操作系统(分别以Nat方式和桥接模式实现) 一.准备知识:win10下打开Administrator的方式 在win10操作系统中,Administrator ...
- Android Topeka介绍
概述 当你已经做Android开发一段时间,并苦于进入瓶颈,这个时候阅读一些优秀App的源码是最好的学习进阶方式,前几天,邀请去参加一个Android大会,我作为其中一个演讲者,专门讲解了Androi ...
- Dynamics CRM2013 Form利用window.location.reload()进行全局刷新带来的问题及解决办法
CRM2013以后,表单的保存后变成了局部刷新而非全局刷新,但很多情况下我们需要刷新整个页面,通过刷新页面来使脚本执行或者业务规则执行来实现某些业务效果,一般我们会使用window.location. ...
- SQL语言四大类
SQL语言四大类 SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句, ...
- Gazebo機器人仿真學習探索筆記(五)環境模型
環境模型構建可以通過向其中添加模型實現,待之後補充,比較有趣的是建築物模型, 可以編輯多層樓層和房間,加入樓梯,窗戶和牆壁等,具體可以參考附錄,等有空再補充. 起伏地形環境構建可以參考之前內容:在Ga ...