[ExtJS5学习笔记]第六节 Extjs的类系统Class System命名规则及定义和调试
本文地址: http://blog.csdn.net/sushengmiyan/article/details/38479079
本文作者:sushengmiyan
-------------------------------------------------------------资源链接-----------------------------------------------------------------------
翻译来源 Sencha Cmd官方网站: http://www.sencha.com/products/extjs/up-and-running/the-class-system
------------------------------------------------------------------------------------------------------------------------------------------------
本篇指导旨在给想要创建或者从EXT JS 4.X或者EXT JS 5.X继承已有类的任何开发者的。
概述
-------
EXT JS 5自带了有超过300的类,到目前为止有200多万的开发者在使用extjs开发,他们来自不同的地方,有不同的背景。所以这样说来,在提供一份公共代码结构上我们就面临着一个巨大的挑战,这些代码结构是:
1.大家都熟悉了解,简单容易学习
2.开发迅速,调试方便,部署的时候也没有痛苦
3.有组织的,可扩展的,并且是可维护的
JavaScript是面向原型的类语言,其中一个最强大的功能就是自由,有好多的解决方案,可以使用不同的编码风格还有技术问题,但是这样就会以不可预知为代价了。没有一个统一的结构,javascript代码就很难理解,很难维护并且不好复用。
另一方面,基于类的编程仍然是最流行的面向对象的编程模式,基于类的语言通常需要强类型,封装和标准的编码惯例,通过让开发人员坚持大量的原则,代码更可能是可预测的,可扩展和可伸缩。然而,这个模型没有JavaScript的动态能力。
每个方法都有优点和缺点,但是我们可以保持好的而坏的部分同时隐藏?答案是肯定的,你可以在Ext JS找到解决方案。
命名约定
类命名约定
MyCompany.useful_util.Debug_Toolbar
这个是被推荐的
MyCompany.util.Base64
这个是可以接受的
MyCompany.data.CoolProxy
MyCompany.Application
顶级名称空间和实际的类名应该驼峰模式其它一切应该都小写,例如:
MyCompany.form.action.AutoLoad
不是使用sencha生成的类尽量不要使用Ext作为顶级空间。缩略词也应该遵守驼峰预约定,如:
使用 MyCompany.util.HtmlParser 而不是MyCompary.parser.HTMLParser
使用MyCompany.server.Http 而不是 MyCompany.server.HTTP
源文件命名约定
Ext.form.action.Submit 是在如下目录存储的 path/to/src/Ext/form/action/Submit.js
MyCompany.chart.axis.Numeric 是在如下目录存储的 path/to/src/MyCompany/chart/axis/Numeric.js
方法和变量的命名规则
可接受的方法名称:
encodeUsingMd5()
getHtml()而不是 getHTML()
getJsonResponse()而不是getJsonResponse()
parseXmlContent()而不是parseXMLContent()
可接受的变量名:
var isGoodName
var base64Encoder
var xmlReader
var httpServer
属性的命名规则
静态类常量属性应该全部大写。例如:
Ext.MessageBox.NO = "No"
MyCompany.alien.Math.PI = "4.13"
声明
旧的方式
var MyWindow = Ext.extend(Object, { ... });
这种方法很容易遵循以创建一个新的类继承自另一个。除了直接继承,我们没有其他方面创造流畅的API的类。这个排除诸如配置、静态和mixins。我们稍后将详细回顾这些物品在本指南。
My.cool.Window = Ext.extend(Ext.Window, { ... });
在本例中,我们想我们新类命名空间,并使其从Ext.window延伸。有两个问题我们需要解决:
xt.ns('My.cool');
My.cool.Window = Ext.extend(Ext.Window, { ... });
第二个问题不容易解决,因为ext.window可能取决于许多其他类。反过来,这些依赖关系可能依赖于其他类的存在。出于这个原因,Ext JS 4之前编写的应用程序引入整个ext-all.js的形式,不管应用程序是不是只需要一小部分的框架。
新的方式
Ext.define(className, members, onClassCreated);
className:类名
Ext.define('My.sample.Person', {
name: 'Unknown',
constructor: function(name) {
if (name) {
this.name = name;
}
},
eat: function(foodType) {
alert(this.name + " is eating: " + foodType);
}
});
var aaron = Ext.create('My.sample.Person', 'Aaron');
aaron.eat("Salad"); // alert("Aaron is eating: Salad");
注意:我们创建了一个新的My.sample的实例。使用Ext.create()方法。我们可以使用新的关键字(new My.sample.Person())。不过建议得到的习惯总是使用Ext.create因为它允许您利用动态加载。动态加载的更多信息参见入门指南
配置
2.如果方法还未定义,创建期间Getter和setter方法为每个配置属性自动生成到类原型类。
3.一个apply方法也为每个属性生成配置。内部自动生成setter方法调用apply方法之前设置值。你可以覆盖apply方法申请配置属性,如果你需要运行自定义逻辑之前设置的值。如果apply不返回一个值,setter不会设置值。
你可以看到下面的配置示例:
Ext.define('My.own.Window', {
/** @readonly */
isWindow: true,
config: {
title: 'Title Here',
bottomBar: {
height: 50,
resizable: false
}
},
applyTitle: function(title) {
if (!Ext.isString(title) || title.length === 0) {
alert('Error: Title must be a valid non-empty string');
}
else {
return title;
}
},
applyBottomBar: function(bottomBar) {
if (bottomBar) {
if (!this.bottomBar) {
return Ext.create('My.own.WindowBottomBar', bottomBar);
}
else {
this.bottomBar.setConfig(bottomBar);
}
}
}
});
/** A child component to complete the example. */
Ext.define('My.own.WindowBottomBar', {
config: {
height: undefined,
resizable: true
}
});
这是一个如何使用它的例子:
var myWindow = Ext.create('My.own.Window', {
title: 'Hello World',
bottomBar: {
height: 60
}
});
alert(myWindow.getTitle()); // alerts "Hello World"
myWindow.setTitle('Something New');
alert(myWindow.getTitle()); // alerts "Something New"
myWindow.setTitle(null); // alerts "Error: Title must be a valid non-empty string"
myWindow.setBottomBar({ height: 100 });
alert(myWindow.getBottomBar().getHeight()); // alerts 100
静态变量
Ext.define('Computer', {
statics: {
instanceCount: 0,
factory: function(brand) {
// 'this' in static methods refer to the class itself
return new this({brand: brand});
}
},
config: {
brand: null
}
});
var dellComputer = Computer.factory('Dell');
var appleComputer = Computer.factory('Mac');
alert(appleComputer.getBrand()); // using the auto-generated getter to get the value of a config property. Alerts "Mac"
错误控制和调试
throw new Error('['+ Ext.getDisplayName(arguments.callee) +'] Some message here');
当有错误在使用Ext.define时抛出的时候,你应该查看这个方法还有类的堆栈信息,你可以看下谷歌Chrome中报错的信息如下:
[ExtJS5学习笔记]第六节 Extjs的类系统Class System命名规则及定义和调试的更多相关文章
- [ExtJS5学习笔记]第十一节 Extjs5MVVM模式下系统登录实例
本文地址:http://blog.csdn.net/sushengmiyan/article/details/38815923 实例代码下载地址: http://download.csdn.net/d ...
- [ExtJS5学习笔记]第四节 欢迎来到extjs5-手把手教你实现你的第一个应用
本文地址:http://blog.csdn.net/sushengmiyan/article/details/38331347 本文作者:sushengmiyan ------------------ ...
- [ExtJS5学习笔记]第二十一节 Extjs5中使用config配置给ext.widget或者create方法传递参数
本文地址:http://blog.csdn.net/sushengmiyan/article/details/39252805 官方例子:http://docs.sencha.com/extjs/5. ...
- [ExtJS5学习笔记]第七节 Extjs5的组件components及其模板事件方法学习
本文地址:http://blog.csdn.net/sushengmiyan/article/details/38487519 本文作者:sushengmiyan ------------------ ...
- [ExtJS5学习笔记]第五节 使用fontawesome给你的extjs5应用增加字体图标
本文地址:http://blog.csdn.net/sushengmiyan/article/details/38458411本文作者:sushengmiyan-------------------- ...
- [ExtJS5学习笔记]第五节 使用fontawesome给你的extjs5应用添加字体图标
本文地址:http://blog.csdn.net/sushengmiyan/article/details/38458411本文作者:sushengmiyan-------------------- ...
- [ExtJS5学习笔记]第十节 Extjs5新增特性之ViewModel和DataBinding
本文地址:http://blog.csdn.net/sushengmiyan/article/details/38612721 本文作者:sushengmiyan ------------------ ...
- [ExtJS5学习笔记]第二十节 Extjs5配合数组的push方法,动态创建并加载组件
本文地址:http://blog.csdn.net/sushengmiyan/article/details/39226773 官方例子:http://docs.sencha.com/extjs/5. ...
- [ExtJS5学习笔记]第十七节 Extjs5的panel组件增加accodion成为折叠导航栏
本文地址:http://blog.csdn.net/sushengmiyan/article/details/39102335 官方例子:http://dev.sencha.com/ext/5.0.1 ...
随机推荐
- 2015 多校联赛 ——HDU5400(水)
Sample Input 5 2 -2 0 2 0 -2 0 5 2 3 2 3 3 3 3 Sample Output 12 5 求最多多少序列满足,前半部分满足d(j+1) = d(j)+d1 ...
- SpringMvc+Spring+MyBatis 基于注解整合
最近在给学生们讲Spring+Mybatis整合,根据有的学生反映还是基于注解实现整合便于理解,毕竟在先前的工作中团队里还没有人完全舍弃配置文件进行项目开发,由于这两个原因,我索性参考spring官方 ...
- JS 实现点击页面任意位置隐藏div、span
通过调用下面的 showhidden(“标签ID”) 显示div/span/…等标签内容,可以实现点击页面任意地方再次隐藏该标签内容,而showhidden(“标签ID”,”nohidden”)可保存 ...
- ELK 6.2.4搭建
开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch.Logstash和Kiabana三个开源工具组成.官方网站:https://www.elastic.co/p ...
- KMP算法小结
最近看了一些关于KMP算法的资料,在此写一篇博客总计一下. 1.KMP算法介绍 KMP算法是一种字符串搜索的改进算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称 ...
- 如何用cmd通过sublime打开文件?
sublime 提供了专门的命令工具subl.exe,就在它的安装目录之下,讲安装目录配置到系统环境变量中就OK了.具体如下: 1.找到sublime安装路径 如我的默认路径:C:\Program F ...
- 初识Redis系列之四:.net使用Redis存储数据
首先Redis在Windows上的安装前面的文章已经介绍过,这里不介绍了,直奔主题, 直接来看看.net怎么使用Redis 首先需要引用redis相关的dll,两个途径,意识网上下载编译好的dll : ...
- mybatis逆向工程,转载别人的,很清楚
转载博客地址:http://www.cnblogs.com/selene/p/4650863.html
- Linux设置文件读写权限
设置文件夹的读写权限: sudo chmod -R 777 /data 权限码描述 sudo chmod 600 ××× (只有所有者有读和写的权限)sudo chmod 644 ××× (所有者有读 ...
- 0426html常用标签属性
一.基础语法 标签:作为网页的最小单元 1.双标签 内容的容器 2.单标签 控制性内容 注释 每一个模块都要写清楚注释 二.基本结构 <!DOCTYPE html> ...