登录
注册
关于我们
简体中文
ENGLISH
搜索
购物车
0 ITEMS ON YOUR CART
首页
动态
方案
案例
专栏
期刊
联系我们
首页
期刊
[Ext JS]Ext JS的类与类体系
Ext JS开发大全
第1章 Ext JS快速入门示例[4/4]
第12章[12.10]富文本编辑器 CKEditor与Ext JS的整合
第12章[12.10.1] Ext JS + CKEditor+Spring Boot 实现编辑器图片上传
第11章[11.6] Ext JS 自行搭建远端库的包升级版本后找不到的问题解决
[Ext JS 4] 实战之Grid, Tree Gird编辑
ext命令集
第12章[12.3] Ext JSGrid中的超链接列及其功能实现
[Ext JS]textfield添加compositionstart、compositionupdate 和compositionend _os
[Ext JS ] 动添切换字段的必填与非必填
3.1 Ext JS 组件总览
[Ext JS] Grid表格批量编辑的实现
Ext JS 快速开发工具
带触发器按钮的输入框
Ext JS的布尔对象类型处理及便捷方法
Ext JS的Object类型处理及便捷方法
ExtJS RadioGroup(单选按钮组) 使用及注意事项
Ext JS 模拟后端数据实现
ToolTip 实现全介绍
Ext JS下拉单选框(Combobox,TagFied)使用及疑难问题解决
Ext JS应用测试概览
Sencha Studio 监视工具( Inspect Tool)
Ext JS 4 升级指南
Ext JS 如何定义公用方法(单例类 or 静态方法)
Ext JS的模块化开发(Package)
Ext3 -- Form 实例。 用来migrate file 数据到DB用的
ExtJS 3 在Tab下加入Form 实例
Extjs Grid 中给已经添加过Filter的列增加标识
Extjs 实战之 Ext.tree.TreePanel Tree无法显示
Extjs弹出框的异步执行
Grid 动态该表列( reconfigure)的性能改善
Spring Boot Ext JS准前后端框架应用的会话(Session)处理
[Ext JS 4] Extjs 图表 Legend(图例)的分行与分列显示
[Ext JS 4] Extjs 之 initComponent 和 constructor的区别
[Ext JS 4] Grid 中的单元格添加Tooltip 的效果
[Ext JS 4] Grid 实战之分页功能
[Ext JS 4] Grid 组件
[Ext JS 4] MVC 应用程序框架
[Ext JS 4] MVC 应用程序框架
发布 [Ext JS 4] contentEL,renderTo, applyTo 释义与区别
[Ext JS 4] 动态加载
[Ext JS 4] 实战之 ComboBox 和 DateField (消失之解决办法)
[Ext JS 4] 实战之 Picker 和 Picker Field
[Ext JS 4] 实战之 带week(星期)的日期选择控件(二)
[Ext JS 4] 实战之 ComboBox 和 DateField 的点击事件在IE下失效
## [Ext JS 4] 实战之 带week(星期)的日期选择控件(三)
[Ext JS 4] 实战之 带week(星期)的日期选择控件
[Ext JS 4] 实战之Chart 坐标控制(单坐标,双坐标)
[Ext JS 4] 实战之Chart, Column Chart 定制颜色
[Ext JS 4] 实战之Grid, Tree Gird 动态添加列
[Ext JS 4] 实战之Grid, Tree Gird 动态添加列续(性能考虑)
[Ext JS 4] 实战之Grid, Tree Gird 动态添加行
[Ext JS 4] 实战之Grid, Tree Gird 添加按钮列
[Ext JS 4] 实战之Grid, Tree Gird编辑Cell
[Ext JS 4] 实战之Load Mask - 在Grid Reconfigure的使用状况
[Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
[Ext JS 4] 实战之多选下拉单 (带checkbox) 续 - 带ALL 选项
[Ext JS 4] 实战之多选下拉单 (带checkbox)
[Ext JS 4] 实战之升级系列一[Ext jS 3-->Ext JS 4]
[Ext JS 4] 实战之将chart导出为png, jpg 格式的文件
[Ext JS 4] 实战之浏览器兼容
[Ext JS 4] 布局之实战二 - 中间区块不会自动伸展 (tab)续
[Ext JS 4] 组件之图表
[Ext JS 4]后台自动产生图档
[Ext JS 4]性能优化
[Ext JS 7 ]7.5 自适应配置 - Responsive Configs
[Ext JS 7] 关联(Association)
[Ext JS 7]事件(Event)
[Ext JS 7]ClassRequire错误解决
[Ext JS 7]的开发模式
[Ext JS 7]基于NPM的开发
[Ext JS ] 动添切换字段的必填与非必填
[Ext JS4] 数据包
[Ext JS4系列]Ext JS4 入门
[Ext JS6] Grid不同列的关联编辑
[Ext JS6] ViewControllers-视图控制器
[Ext JS6]Ext.Template
[Ext JS6]Sencha Cmd
[Ext JS6]编码规范
[Ext JS6]多类型设备开发
[Ext JS6]工作区-Workspace
[Ext JS6]路由(Routing)及使用
[Ext JS6]视图模型和数据绑定
[Ext JS6实战] Ajax获取Tree Store
[Ext JS6实战] Ext.XTemplate
[Ext JS6实战]动态数据绑定
[Ext JS] Sencha Cmd命令参考之二
[Ext JS] Sencha Cmd命令参考之一
[Ext JS] Group Grid-分组网格
[Ext JS] Group Grid-分组网格
[Ext JS]嵌套Grid的实现及注意事项
[Ext JS]SimXhr.js__dc=1659315492151_65 Uncaught TypeError问题分析与解决
[Ext JS]Sencha Studio安装与快速介绍之一
[Ext JS]textfield 添加 compositionstart、compositionupdate 和 compositionend
[Ext JS]图片显示方式
[ExtJS 6]Grid分页工具栏无效问题解决
[ExtJS6]ResponsiveColumn-自适应列布局
[Extjs 4] 类系统
基于Ext JS的模块化应用框架搭建及开发
[Ext JS] 自行搭建远端库的包升级版本后找不到的问题解决-The following versions are available
[Ext JS]鼠标移入移除时弹出和关闭窗口
[Ext JS]富文本编辑器 CKEditor与Ext JS的整合
[Ext JS]可编辑列Grid的全场景开发
['Ext JS]Grid中的超链接列及其功能实现
[Ext JS]Ext JS + CKEditor+Spring Boot 实现编辑器图片上传
[Ext JS]介绍与快速入门1
[Ext JS]实现带动态数字的图标
Spring Boot+Ext JS 实现图形验证码
Ext JS介绍与快速入门2
Ext JS开发基本环境准备与项目创建
[Ext JS]开发模式及快速测试方式
[Ext JS]多类型终端-电脑、移动端(手机、平板)
[Ext JS]基于Ext JS的MVC/MVVM架构的应用开发模式
[Ext JS]Ext JS的类与类体系
[Ext JS]Ext JS组件、容器与布局
[Ext JS]组件与容器的选择与开发
[Ext JS]Ext JS数据模型与数据封装
[Ext JS]Ext JS的控制器类型及使用
[Ext JS]说透Ext JS的窗口及对话框用法
[Ext JS]说透Ext JS的窗口及对话框用法
[Ext js]Grid行选择的多种场景和实现方式
[Ext JS]Ext JS类的继承与混合
CmsWing
[Ext JS]Ext JS的类与类体系
## Ext JS的类与类体系 ### JavaScript: 基于原型的面向对象的开发语言 JavaScript虽然是面向对象的开发语言, 但是其是原型驱动开发的,其本身是没有类的概念的。原型编程使用的是通用的对象, 通过对这个通用对象进行克隆和扩展,实现不同种类的对象。比如:“动物(Animal)”对象具备动物的属性和功能,从“动物”复制“人”的对象,附加上人特有的属性,没有单独的人的实例都从这个对象中克隆。 注意,这里虽然实现了Java、C#对从类中实例化对象的功能, 但是却没有实际的类的概念。 基于类的面向对象开发。 定义不同的类,创建类了实例获取对象。强类型。 是面向对象开发的主流。 动态功能弱。 基于原型的面向对象开发。从通用对象克隆和扩展实现不同种类的对象定义。 JavaScript语言最大的优点是灵活,但是容易导致不同的编程风格和技术,没有统一的结构,难于理解、维护,也不易用重用。所以Ext JS导入了基于类的概念和编程。 ### Ext JS对JavaScript语言的扩展 Ext JS是前端的JavaScript概念。 但是其在基于原型的基础上发展了前端的类的概念。支持类的继承以及拥有完整的类结构。可以基于Ext JS的类进行扩展。 基于MVC/MVVM模式的几个类如下: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4zIDNTfL-1606690586414)(images/screenshot_1587655557976.png)] ### 类的定义规则 使用字母或是数字,不要使用下划线和连字符等其他字符。使用驼峰法命名。 类名包含的专业名词或是缩略语也使用驼峰法,比如 JSON --> Json(建议使用) HTML --> html(建议使用) 类最好是归到包下面,便于管理。使用点号(.)分隔。 第一个包名使用驼峰法,一般是应用的名字,比如: MyApp 其他的包名全部小写 完整类名的示例如下: Ext.data.JsonProxy MyApp.view.MyView ### 类源码文件 类的源码文件是.js后缀文件,文件命名保持和类名一致,这样最大的好处就是不需要使用Search功能就能查找到某个类的源码文件,前端代码可以像后端Java代码一样有结构性, 使用了Ext JS插件后,可以很容易的定位源码文件。 在Ext JS SDK中,区分classic和modern, 源码文件分别位于classic\classic\src和modern\modern\src路径中,以classic的Ext.panel.Panel类为例,源码文件是 classic\classic\src\panel\Panel.js (图) 自定义的类的源码文件可以根据classic和modern分类,存放在项目的classic和modern路径下,非页面显示的(比如Model、Store相关的类)两种模式都可以共用的类可以放在app目录下。 (图) 类的定义 在类文件中,使用Ext.define定义类, 基本语法是: Ext.define(className, members, onClassCreated); className: 类的名字,类型是字符串, [必须] members:属性或是方法等配置,类型一般是JSON对象,也可以是字符串。 onClassCreated :类创建后的回调方法,类型是函数[可选] 比如在项目MyApp中定义一个类名是MyApp.model.User的模型类, 源码文件是MyApp/app/model/User.js,代码内容如下: ```javascript Ext.define('MyApp.model.User', { name: '', constructor: function (name) { if (name) { this.name = name; } }, buy: function (goods) { alert(this.name + " is buying:" + goods); } }); var mayun = Ext.create('MyApp.model.User', 'Ma Yun'); //创建类实例(对象) mayun.buy("Car"); //调用类对象的方法 ``` 这里仅简单演示类的定义和实例化,实际开发类会从父类继承。 Ext.create()方法用来创建类的实例, 也可以使用new关键字,比如 new MyApp.model.User() 提醒: 建议统一使用Ext.create()方式进行创建,好处是可以使用到动态加载的特性。 类文件的内容:方法和变量 命名规则: 类文件中的方法和变量最要以字母命名, 允许但不建议使用数字。不要使用下划线或其他非字母的字符。 使用驼峰法命名 实例: //方法名getHtml() (尽量不使用getHTML())getJsonResponse() //变量名var uservar httpServer 静态变量使用全大写,比如: Ext.MessageBox.YES = "Yes"MyApp.Math.PI = "3.14" ### 类定义的专用属性 config 在定义类时,有一个专用属性 config可以使用,这个属性定义的内容在类被创建之前由Ext.Class这个预处理程序处理,包含的功能有: 配置从其他类成员完全封装 如果还没有定义方法,则在类创建之前,会自动产生每个config属性的Getter和Setter方法到类原型中。 如果定义了apply方法,setter方法内部会先调用apply方法,这里就可以重写apply方法在设置值之前进行客制化。 如果apply方法没有返回值,setter方法也不会设置值。 如果定义了update方法,则在设置不同值的时候, apply和updata方法会将同时将新值和旧值作为参数进行传递。。 Ext本身的类不需要调用手动initConfig() 从Ext.Component继承的不需要 从Ext.Base继承的类,需要手动调用initConfig() 。 类的高级功能定义 ### 静态(Statics)成员 在Ext JS类中,可以像后端Java类一样定义静态变量和静态方法。在面对对象的语言中,类需要实例化成对象之后,才能够访问和调用其中的方法和属性。如果这些属性和方法的共用性很高, 直接使用类进行获取和调用会比较方便。 于是,在不对类进行实例化。通过类本身就可以调用这些方法。 在后端语言中,常用在一些公用的静态方法上,比如字符串类型转换 String.valueOf(b),在Ext JS 前端适用在登录、登出、获取登录Token等场景,也可以使用在多个组件类对应一个控制器的场景。 静态成员在类中使用statics配置一个JSON对象, 属性或函数作为该对象的元素,示例代码如下: ```javascript Ext.define('MyApp.controller.Main', { statics:{ loginUser:'Oscar', getLoginTocken:function(){ return "jwt前后端分离Token" } } }); console.log("登录用户="+MyApp.controller.Main.loginUser); console.log(MyApp.controller.Main.getLoginTocken()); ``` ### 错误处理 使用 Ext.getDisplayName()获取方法的显示名 但错误是在通过Ext.define()定义的类的方法中抛出的,在浏览器控制台(比如Chrome)可以看到错误发生的调用堆栈。 示例代码如下: ```javascript Ext.define('MyApp.controller.Main', { // extend: 'Ext.app.ViewController', displayName:'My Display Class', className:'My Class Name', alias : 'controller.KgdProjectInfo', sayHello:function(){ throw new Error('['+ Ext.getDisplayName(arguments.callee.$owner) +'] 出错了'); } }); var controller = Ext.create('MyApp.controller.Main',{ displayName:'My Display Class' }); controller.sayHello(); ``` arguments 是方法的默认参数 arguments.callee是被呼叫的对象
网站导航
首页
动态
方案
案例
专栏
期刊
联系我们