`
slowman
  • 浏览: 38368 次
  • 性别: 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仿桌面系统"这个项目中,我们将探讨EXTJS如何实现类似桌面系统的功能和界面效果。 首先,EXTJS的组件库包含了各种各样的UI元素,如窗口(Window)、面板(Panel)、菜单(Menu)、按钮(Button)等,这些都...

      EXTJS桌面系统-完整实例

      EXTJS桌面系统-完整实例 数据库可以根据映射文件自己简历 这里只是为大家展示一下

      extjs做的图书管理系统

      《基于ExtJS的图书管理系统详解》 图书管理系统是IT领域中的常见应用场景,它涉及到前端用户界面、后端数据处理以及数据库管理等多个技术层面。本文将详细介绍一个使用ExtJS开发的图书管理系统,该系统同时结合了...

      EXTJS4之类系统和编码规范

      ### EXTJS4之类系统和编码规范 #### 一、概述 ExtJS4 是一款功能强大的JavaScript框架,提供了超过300个内置类,支持不同后端语言的开发者使用。为了应对如此大规模框架所带来的挑战,ExtJS4 需要具备以下几个特点...

      jsp extjs Efs管理系统

      开发者可能会在这些文件中找到关于业务逻辑、数据访问对象(DAO)、控制器(Controller)以及与EXTJS前端交互的相关类。通过深入研究这些源码,可以学习到如何在JSP和EXTJS环境中实现完整的业务流程。 总的来说,...

      Extjs5.0从入门到实战开发信息管理系统

      本教程旨在帮助初学者掌握ExtJS 5.0,并通过实战开发信息管理系统,将理论知识与实际应用相结合。 首先,我们要了解ExtJS的基础知识。这包括学习ExtJS的架构、事件模型、布局管理、组件系统以及数据绑定。在ExtJS中...

      extJs3升级extjs4方案

      ExtJS3 升级到 ExtJS4 需要修改大量代码,主要是因为 ExtJS4 配备了一类新的系统,不向后兼容。在 ExtJS 3 里生成表的几个框架组件,ExtJS4 大多生成 div,这使得 CSS classes 将会失败。ExtJS4 已完全重新写 grid ...

      (Java+JSP)可二次开发Extjs4.0通用后台管理系统源码完整大型项目.zip

      4. **后台管理系统**:这类系统通常包括用户管理、权限控制、数据报表、工作流等模块,用于企业内部的日常运营和管理。本项目应包含这些基本功能,且具备良好的可扩展性,以适应不同企业的业务需求。 5. **可二次...

      Extjs简单版酒店管理系统

      Extjs简单版酒店管理系统是一款基于Visual Studio 2005(VS2005)、SQL Server 2000和Extjs 2.0技术构建的Web应用。它旨在提供一个用户友好的界面,实现酒店业务流程的无刷新操作,提高工作效率。下面将详细介绍这个...

      手工打造Extjs (1) 类系统

      《手工打造Extjs (1) 类系统》这篇文章主要探讨了如何构建Extjs的类系统,这是一个关键的概念在JavaScript库的开发中,特别是对于Extjs这样的框架。Extjs是一款基于JavaScript的UI组件库,它提供了丰富的界面组件...

      Extjs通用权限管理系统

      《Extjs通用权限管理系统》是基于特定技术栈构建的一个企业级应用,主要用于实现用户、角色和权限的精细化管理。在本文中,我们将深入探讨这个系统的架构、主要技术和关键功能。 首先,开发平台的选择至关重要,本...

      ExtJs 类的设计

      它的类系统是其核心特性之一,借鉴了面向对象编程的概念,使得在JavaScript中可以实现结构化、可复用的代码。这篇博客文章“ExtJs 类的设计”可能深入探讨了如何在ExtJs中有效地设计和使用类。 1. **类的定义** 在...

      SSH+Extjs Oa管理系统整合

      SSH+Extjs Oa管理系统整合是一项复杂而关键的IT任务,涉及到多个技术栈的集成,主要包括Struts、Spring和Hibernate这三个Java EE框架,以及Extjs前端框架。在这样的系统中,SSH负责后端业务逻辑处理和数据管理,而...

      extjs流程界面设计器参考_ExtJS工作流设计器_extjs工作流_extjs_

      ExtJS的`Ext.draw.Container`类可以用来创建这样一个画布,支持拖放操作,允许用户放置和调整工作流元素的位置。 3. **连接线**:工作流元素之间通常需要通过连接线表示流程流转。ExtJS提供了绘图API,可以用来绘制...

      ExtJs制作新闻管理系统

      "sz"可能是一个包含新闻管理系统的源代码或编译后的资源文件,这些文件需要在特定的环境中被编译和运行,如Java的类文件需要Tomcat来加载和执行,前端的JavaScript和CSS文件需要与HTML一起被浏览器解析。 总的来说...

      Extjs4+MVC+struts2后台管理系统

      在"Extjs4+MVC+struts2后台管理系统"中,ExtJS4作为前端框架,负责用户界面的交互和展示,而MVC(Model-View-Controller)设计模式则被用来组织和管理应用程序的逻辑。 MVC模式在ExtJS4中被广泛使用,将应用程序...

      SSH、extjs进销存管理系统

      SSH+EXTJS结合的进销存管理系统,可以利用SSH的强大后端功能处理复杂的业务逻辑和数据处理,EXTJS的前端优势则可以提供用户友好的界面和流畅的操作体验。 在这款"SSH+EXTJS进销存管理系统"中,可能包含以下主要模块...

      轻松搞定Extjs 带目录

      Extjs的组件系统非常丰富,包括按钮、日期选择器、ComboBox等,它们都可以通过配置实现复杂的交互逻辑。数据管理部分涉及到了Extjs对Ajax请求的封装、数据代理、读取器、存储等概念。Extjs对分页、表单验证、表单...

      Extjs为前端的图书管理系统

      在“Extjs为前端的图书管理系统”这个项目中,ExtJS 被用来构建系统的前端部分,提供了高效且易于使用的界面元素,如表格、面板、窗口、菜单等,用于展示和操作图书数据。 图书管理系统通常包括以下功能模块: 1. ...

      Struts2,Hiberante,Spring,Extjs,OA办公系统,完整包

      在OA系统中,ExtJS可以用于构建用户交互性强、视觉效果好的界面,如数据表格、表单、图表等,提升用户体验。 在OA办公系统中,这四个技术的结合使用能够构建出一个功能完善、性能优秀且易于维护的系统。Struts2处理...

    Global site tag (gtag.js) - Google Analytics