`
slowman
  • 浏览: 37794 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

extjs类系统

 
阅读更多
1 ,类系统Class System
extjs4.0开始,重构了新的类系统。本教程分为以下四部分:
(1) 概述,介绍强大类系统的必要性。
(2)命名习惯,阐述extjs命名类,方法,属性,变量和文件的最佳实践。
(3)动手实践,提供详细的一步步的编码例子。
(4) 错误处理和调试。阐述异常处理技巧。

(1) 概述,介绍强大类系统的必要性。
EXTJS4.0有超过300个类。
JavaScript is a classless, prototype-oriented language. Hence by nature, one of the language's most powerful features is flexibility
JS可以采取很多不同的方式,不同的编码风格和技术完成同样的工作。但是也正是这种特性会导致无法预料的代价。没有一个统一的架构,JS代码会非常难理解,维护和重用。
基于类的编码方式仍然是面向对象中最受欢迎的。但是OOP不具备JS等语言的动态特性。
Each approach has its own pros and cons,

每一种方法都有它的优缺点。EXTJS4.0将JS和OOP的优点结合起来啦。

(2) 命名习惯
在编码中对类,变量等使用统一的命名习惯,可以使代码蛮得有组织,结构化和可读性好。。
a, 类
类名最好只包括字母,数字虽然也可以,但是EXTJS不推荐这样做。最好不要采用下划线,联字符或者其他非字母字符。

比如说:MyCompany.useful_util.Debug_Toolbar is discouraged
        MyCompany.util.Base64 is acceptable

类名必须采用合适的命名空间以包的形式组织起来。命名空间必须唯一。
MyCompany.data.CoolProxy
MyCompany.Application
只有最上层以及类名应该使用CamelCased,其他的都应该全小写:
MyCompany.form.action.AutoLoad

不是EXT官方发布的类严禁使用Ext作为顶级命名空间。

首字母缩写同样也应该遵守CamelCased惯例。

Ext.data.JsonProxy instead of Ext.data.JSONProxy
MyCompany.util.HtmlParser instead of MyCompary.parser.HTMLParser
MyCompany.server.Http instead of MyCompany.server.HTTP

b,源文件
类的名字应该是可以直接映射到它们存储的文件路径,因此必须一个文件只包含一个类。如:
  • Ext.util.Observable is stored in path/to/src/Ext/util/Observable.js
  • Ext.form.action.Submit is stored in path/to/src/Ext/form/action/Submit.js
  • MyCompany.chart.axis.Numeric is stored in path/to/src/MyCompany/chart/axis/Numeric.j

path/to/src代表工程的类目录。所以类都应该位于这个根目录下。,


(3)方法和变量,类的属性
方法和变量、类的属性命名和类一样,最好也只包括字母字符 。方法和变量命名必须camelCased 。如:
  •  encodeUsingMd5()  可以接受的;
  • getHtml() 而不是getHTML() 
  • parseXmlContent() 而不是parseXMLContent()
  • var isGoodName var base64Encoder var xmlReader var httpServer   第一单词小写
注意:类的属性如果是静态常量的时候,必须全部大写。
    • Ext.MessageBox.YES = "Yes"
    • Ext.MessageBox.NO = "No"
    • MyCompany.alien.Math.PI = "4.13"

3、动手实践
(1) 传统方法
extjs4.0以前版本中创建一个类一般是从Ext.extend()方法开始的。
var MyWindow = Ext.extend(Object, { ... });
这种方法的好处是容易创建一个继承自另一个类的新类,而不是直接继承。however, we didn't have a fluent API for other aspects of class creation, such as configuration, statics and mixins.
 如:My.cool.Window = Ext.extend(Ext.Window, { ... });
如果要对这个新类设置名字空间,并且让它继承自Ext.Window。必须强调两点:
a, 在将Window指定为Mycool的属性之前,My.cool必须是一个一个已经存在的对象。
b,Ext.window在被引用之前必须存在或者加载。
第一点使用Ext.namespace(Ext.ns)解决。不爽的是你必须永远记住在Ext.extend之前加入名字空间。
Ext.ns('My.cool');   //这句不能少。
My.cool.Window = Ext.extend(Ext.Window, { ... });
为了解决第二点,在extjs4.0之前,需要包括ext-all.js,那怕我们只用到extjs框架的一小部分。
在extjs4.0中,可以通过一个方法Ext.define消除这些不足之处,基本语法如下:
Ext.define(className, members, onClassCreated);
  • className: 类名
  • members :类的成员,以key-value形式存储在一个集合中。
  • onClassCreated :可选的回调方法,它将在此类所有的依赖全部准备好后调用,这个方法很多场合相当有用。
Ext.define('My.sample.Person', {
    name: 'Unknown',

    constructor: function(name) {
        if (name) {
            this.name = name;
        }

        return this;
    },

    eat: function(foodType) {
        alert(this.name + " is eating: " + foodType);

        return this;
    }
});

var aaron = Ext.create('My.sample.Person', 'Aaron');
// new My.sample.Person())同样也可以的,但是推荐Ext.create() 方法,后者可以利用动态加载机制。 aaron.eat("Salad"); // alert("Aaron is eating: Salad");

(2),配置
extjs4.0引入一种专门的config属性。特点如下:
配置信息完全从其他类成员封装。
如果类的Gettert和Setter方法没有定义,那么在创建这些类的时候,类的配置属性的getter和setter会自动生成。
每一个config 属性还会生成一个apply方法,自动生成的setter方法会在设置值之前内部调用apply方法。如果在设置值之前 需要定制自己的业务逻辑时,可以重写这个方法。如果apply方法没有返咽一个值,相应的setter方法不会设置值。如:
Ext.define('My.own.Window', {
   /** @readonly */
    isWindow: true,

    config: {
        title: 'Title Here',

        bottomBar: {
            enabled: true,
            height: 50,
            resizable: false
        }
    },

    constructor: function(config) {
        this.initConfig(config);

        return this;
    },

    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 && bottomBar.enabled) {
            if (!this.bottomBar) {
                return Ext.create('My.own.WindowBottomBar', bottomBar);
            }
            else {
                this.bottomBar.setConfig(bottomBar);
            }
        }
    }
});
使用方法如下:
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"

(3) 静态
静态成员采用static 属性设定。
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
    },

    constructor: function(config) {
        this.initConfig(config);

        // the 'self' property of an instance refers to its class
        this.self.instanceCount ++;

        return this;
    }
});

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"

alert(Computer.instanceCount); // Alerts "2"

4 错误处理和调试
采用 Ext.getDisplayName()显示任何方法的名字 

     








    分享到:
    评论

    相关推荐

      extjs仿桌面系统

      extjs仿桌面系统

      EXTJS4之类系统和编码规范

      ExtJs4 中文文档之类系统和编码规范

      Extjs5.0从入门到实战开发信息管理系统(Extjs基础、Extjs5新特性、Spring、Spring mvc)

      本教程从Extjs5的开发环境搭建开始,讲解了Extjs5的项目结构(包括核心文件的作用),Extjs类的一些基本概念,布局、事件、MVVM和MVC架构、路由器,数据绑定等的概念和实际使用,同时讲解了开发中常用的extjs UI...

      TypeScriptExtJSEmitter:以 Ext JS 类样式发出代码的 typescript 分支

      Typescript 编译器发出的 Javascript 与 ExtJS 类系统不兼容。 ExtJS 需要使用像Ext.define(CLASSNAME, MEMBERS);这样的语法来定义类Ext.define(CLASSNAME, MEMBERS); 但是 Typescript 发出基于原型的代码。 这个...

      Extjs精华版图书管理系统源码_商业源码_sqlserver_ExtJS6._extjs_V2_

      2、系统设置:图书设置、用户设置、角色设置、图书大类设置、图书小类设置、数据字典、权限分配、程序设置。技术特点:1、演示常用控件使用如:TabPanlGridPanelTreePanel,Menu,FormPanelWindowux等等。2、演示...

      ExtJS4中文教程2 开发笔记 chm

      Extjs4 API文档阅读(一)——类系统(Class System) Extjs4 API文档阅读(三)——布局和容器 Extjs4 API文档阅读(二)——MVC构架(上) Extjs4 API文档阅读(二)——MVC构架(下) Extjs4 API文档阅读(四)——Data ...

      aspnet Extjs发票管理系统

      技术特点:Extjs框架,三层架构,Ajax,json 1.仿office2007菜单.介面美观大方,可动态更改皮肤保存至cookie。 2,json数据源与实体类的相互转换. 3.可下载桌面版登录方式,统计在线人数. 4, chm操作手册,方便操作人员...

      EXTJS 源码

      作为Extjs 4架构更新的一部分,我们引用了一个功能更完整的类系统。 无论何时,Extjs都会提供一个优秀的类系统,这次我们进一步为它添加了动态加载、mixins和在线依赖计算等特性。

      JSP信息办公类实例开发源码——ExtJS 图书管理系统.zip

      JSP信息办公类实例开发源码——ExtJS 图书管理系统.zip

      ExtJS(ajax框架) 4.2.1

      类系统:作为Extjs 4架构更新的一部分,引用了一个功能更完整的类系统。 沙盒:在ExtJS历史上,ExjJS 4首次提供了完整的沙盒模式。从ExtJS 4开始,框架不再扩展数组或函数等原生对象,因此,与其它的框架同时加载到...

      ExtJS5-一个简洁完整的后台管理系统入门实例

      1、基于ExtJS 5.1版本实现,采用Neptune样式风格,中文语言; 2、使用全新的MVVM模式架构,面向对象写法; 3、全系统只有一个index.html界面,登录框也封装成独立的视图组件; 4、通过实现角色管理、用户管理两个...

      上传下载ExtJS 2.2 开源网络硬盘系统-dogdisk.rar

      “ExtJS 2.2 开源网络硬盘系统_dogdisk.rar”是一个计算机专业的JSP源码资料包,它提供了一套完整的网络硬盘系统解决方案。该系统基于ExtJS 2.2框架开发,具有丰富的界面和良好的用户体验。首先,这个系统提供了一个...

      精通JS脚本之ExtJS框架.part2.rar

      最后利用一个商品信息管理系统和一个企业任务管理系统,向读者演示了ExtJS在实际项目中的应用以及实现流程。  《精通JS脚本之ExtJS框架》附有配套光盘,提供了书中实例的源代码和视频教学文件。此外,读者还可以...

      手工打造Extjs (1) 类系统

      NULL 博文链接:https://junjun16818.iteye.com/blog/1733447

      Extjs2.2开源网路硬盘系统println改版

      这个是我根据Extjs2.2开源网路硬盘系统.rar改版过来的 实现功能分页 修复删除功能 实现图片显示带大图显示 根据后缀名来分类显示 是图片的就显示带大图显示 不是图片的就显示原来的文件名字

      Extjs4 API文档阅读(一)——类系统(Class System)

      第一部分:概述。说明了强大的类机制的必要性 第二部分:编码规范。讨论类、方法、属性、变量和文件命名 第三部分:DIY。详细的编码示例 第四部分:错误处理和调试。提供一些有用的调试和异常处理技巧

      extjs4.0手册翻译

      1-1-类系统.doc 1-2-MVC应用架构.doc 1-3-布局和容器.doc 1-4-组件.doc 1-6-拖放.doc 1-7-本地化.doc 1-8-键盘导航.doc 2-1-表格.doc 2-2-树.doc 2-3-数据.doc 2-4-表单.doc 2-5-主题.doc 3-1-Ext应用架构.doc 附件...

      asp.net与extjs开发点卡在线销售系统

      传统的面对面的现金交易已经远远不能满足人们的现代化生活需要,尤其是卡片类商品,人们往往要为了简单的卡号和密码跑一趟商店。这些都给人们的生活带来了很大的不便。为了更好的适应现代社会人们的购物需要,为了...

      AnyFo - Util - Json4Ext:通用ExtJS数据交换处理

      在大家开发的系统中,如果程序用ExtJS做表现层,那么就需要使ExtJS开发的界面和后台Java代码中生成的数据交互,一般来说,可以选 择XML格式和Json格式的数据进行交互,但是XML格式的数据操作相对繁琐,因此,大部分...

      精通JS脚本之ExtJS框架.part1.rar

      最后利用一个商品信息管理系统和一个企业任务管理系统,向读者演示了ExtJS在实际项目中的应用以及实现流程。  《精通JS脚本之ExtJS框架》附有配套光盘,提供了书中实例的源代码和视频教学文件。此外,读者还可以...

    Global site tag (gtag.js) - Google Analytics