Ext 4 概述(二)之Ext Core

Ext Core

新型类系统

参考资源

Ext JS 4 的类机制主要围绕传统OO模型而设计,弥补了Prototype
OO不足。虽然性质上仍为模拟的手段,但包含了比较完整的OO特征,并且保持对旧Ext3类机100%兼容。Ext JS 4(连同 Ext
Core)提供的新功能有:

  • 继承方面Ext.defined代替了原来Ext.extend的写法。
  • 自动计算依赖关系及动态类加载。
  • 多态
  • 静态成员
  • 为配置项自动生成的getter/setter方法

 

如何写类?

你仍可在Ext4使用new
ClassName()的语法,不过推荐使用Ext.define()函数定义新类。利用Ext类系统显式定义好的类,将有什么不同呢?关键字new仍然可用,可没太大的特别。Ext.define还有一个好处,自动创所须的建命名空间,从而免去声明命名空间的一步。

这里是利用新语法定义的一个新Ext.Component子类。

// Ext 3:
Ext.ns('MyApp'); // 命名空间在Ext 3是必须的
MyApp.CustomerPanel = Ext.extend(Ext.Panel, {
// etc.
});

// Ext 4
Ext.define('MyApp.CustomerPanel', {
extend: 'Ext.panel.Panel',
// etc.
});

加载类

Ext
4终于引入了动态类加载的系统了,虽然你可以选择使用,也可以选择忽略,但无论怎么说,终于考虑这点,希望社区不再利用此缺点来指责Ext之庞大。首先交待一下提供哪些功能:

  • 动态加载(Dynamic
    loading):

    运行时期间,Ext内部会根据依赖树的关系异步地下载类文件。这意味你不用再页面上手动引入include子类的HTML标签就可以加载你所需的资源,同样不会造成阻塞。开发期间,动态加载的灵活性远比关心页面加载速度的意义打得多。
  • 动态生成build文件(Dynamic build
    generation)

    :对于产品化,很希望就是打包为一份文件,亦即build
    files。由于Ext已经清楚掌握依赖关系,所以很容易导出一个依赖关系图,适合于某些自定义build配置。更开放的是,不限于Ext的命名空间,只要按照Ext类规范写类,Ext就会计算它们的关系。在不久的将来,Ext开发者会享用”一键化“的build服务,而且一切都是经过智能计算的,决没有冗余的代码。

动态加载必须有两个前提条件,一是打开Ext.define;二是在写类的时候须清楚指明依赖关系,当中关系所涉及两个属性说明如下:

  • requires: 所依赖的类。保证当前被实例化之前其他类就绪。
  • uses:
    可选的依赖,不一定必须的(上面requires是指定必须的模块)。uses的类可以异步下载,不限于一定要在类实例化之前(因为异步的,可能之后)。

多态Mixins

多态(或译作“混元”)可以为现有的某个对象注入客制功能提供一种灵活的方式。mixins配置项,包括实例化类期间,允许给类原型“混入”新的能力。这与Ext.override函数作用类似。尽管该方法不会覆盖现有的方法,就像override那样不会直接覆盖,但是该方法的参数还是。Mixins语法如下:

Ext.define('Sample.Musician', {
extend: 'Sample.Person',
mixins: {
guitar: 'Sample.ability.CanPlayGuitar',
compose: 'Sample.ability.CanComposeSongs',
sing: 'Sample.ability.CanSing'
}
});

静态成员(Statics)

通过statics这个属性可以设置类的静态成员。示例如下(谢谢SilverNet
兄提醒):

Ext.define('MyClass', {
statics: {
idSeed: 1000,
getNextId: function() {
return this.idSeed++;
}
}
});

配置项 Config

Ext之中我们用术语“配置项
(config items)”来表示任意的属性,这些属性在类原型(class
prototype)都可以明确找到。有了配置项可以通过代码的调用对API读或者写。Ext
4在这点上基本没有什么问题,唯一作出新内容的便是带来了特定项“config”。当类定义中加入config属性,其对象所包含的内容指的就是“配置项”,而且强调一点就是,围绕配置项自动产生getter、setter、reset和apply方法,其中setter还提供模板方法自定义setter逻辑。基本示例代码如下:

 

……根据以上介绍的机制,自动生成下列方法:

title: 'Default Title',

getTitle: function() {
return this.title;
},

resetTitle: function() {
this.setTitle('Default Title');
},

setTitle: function(newTitle) {
this.title = this.applyTitle(newTitle) || newTitle;
},

applyTitle: function(newTitle) {
// 自定义代码
// 如Ext.get('titleEl').update(newTitle);
}

时间: 2024-10-12 19:42:55

Ext 4 概述(二)之Ext Core的相关文章

每天一剂Ext良药(二)

四十.创建一个在线HTML编辑器的最简单方法 如以下的HTML(就是一个textarea来放置内容)和JS: <textarea class="edk-htmlEditor">fvgssdfsd</textarea> Ext.onReady(function(){ Ext.QuickTips.init(); new Ext.form.HtmlEditor({ applyTo : Ext.select('textarea.edk-htmlEditor').item

Ext 4 概述(四)之 ARIA、Data、Draw、Fx

Ext JS 参考资源 Intro to Ext 4 (video Ext 4 Architecture (video) 通用问题 适配器(Adapters) 之前的各个Ext版本中都可以透过使用适配器(adpaters)的方式转换第三方的JavaScript库为我所用.Ext4的话就没这支歌仔唱了.改朝换代后,Ext JS应用程序的底层库唯一限定为Ext Core.不过我们依然可以继续让Ext Core与别的JS库共存于一个JS运行时(实际上这就是为什么一些JavaScript对象其原型的方法

Ext 4 概述(一)

For both extjs and ext core Ext 4概述 Summary: Ext4概述 Author: Brian Moeskau (译者Frank Cheung ) Published: 2011年三月二十九号 Ext Version: Ext 4.x Languages: Chinese   Ext 4有志诚成为Web程序其革命性的开发平台.框架中的每一个首要的组件几乎都作了改善,而且属于相当大幅度的改善.对于Ext3来说--4.0许多组件以及子系统都是表现得焕然一新!本指南

Ext 3.0新增内容系列文章之二:Ext.data.Writer简介

上期我们的内容是关于API接口的配置,其中涉及到CRUD只是略略一提,没有谈论太多,今期再重点说说. 根据CRUD 的原则,数据或资源操作不外乎"生.变.见.灭"的四大规律,也就是说,只需要"创建(Create ).获取(Read ).更新 (Update )和销毁(DELETE )"四种行为便可完成对资源的处理和操作了.如果"读"操作在Ext 中没有题的话,那么其他三种操作就应该归类为"写"的操作了.这部分的内容,在Ext

Ext 4 概述(五)之布局Layout、组件Component、Form

Layout 参考资源 Ext 4 Layouts (video) Ext 4 Layouts (slides ComponentLayout ComponentLayout是一种新型的布局方式,许多复杂的组件就采用这种布局(与之对应的为ContainerLayout,"ContainerLayout"--传统基于容器布局的新名字)来计算内置元素的大小尺寸,以响应resize的调用.Field字段组件的FieldLayout布局,关于labell控件和input元素控件的大小尺寸和定位

Ext 4 概述(三)之Env命名空间 &amp;amp; 语言增强包 &amp;amp; Ext.Function

Env命名空间 提供浏览器和操作系统的相关信息,还有告诉我们现代浏览器提供了什么功能. Ext.env.Browser 该类提供了全部浏览器的元信息(名称.引擎.版本.是否 Strict 模式等等. Ext.env.FeatureDetector 这是一个在 Ex JS 3 中没有类,完全新的功能,其功能在于检测浏览器特性如何,主要针对现代 HTML5 和 CSS3 的特性,包括移动平台在内的特性列表,有: CSS 变形.动画.转换 Canvas.SVG.VML 触控能力.方向 导航 Geolo

学习YUI.Ext基础第一天_YUI.Ext相关

导言 翻了翻以前的旧贴子,有值得回味的地方共分享: Post1: ................. 我们现在的大量应用依赖于浏览器(主要是 IE)的脚本处理能力,在有些老机器上跑的时候确实会略显缓慢,但是目前的主流机型处理起来已经没有任何问题了.我们设计了一整套的 Web 开发框架,这套框架将随着应用的锤炼而越来越稳定.JavaScript 用的不好容易造成 IE 的崩溃,我们是靠提高代码的重用度来解决这个问题的,因为重用度越高的代码往往越稳定. 有些眼高手低的人往往凭第一眼印象就把 Java

Ext 4 概述(六)之Grid

数据表格(Grid) 这次升级Ext 4全部重写了Grid组件.显然,诸多理由和原因迫使我们升级Grid,但Ext 4 Grid向后兼容方面真的很难顾全.为此,我们将会提供一份关于Grid在Ext3升级到Ext4的指南. 智能化渲染 旧Ext JS 3 Grid工作起来还是蛮不错的.但透过"最小公分母(least common denominator)"的方法论来确定其各种功能的话,很容易带来一点不足的就是,伴随着Grid的每一项功能,都会生成大量的HTML Markup产生.我们不得

Ext 4 概述(七)之面板Panel &amp;amp; 杂项

  面板Panel 支持了边界接触(Docking) Panel的改变之一便是通过面板特定的组件布局类(a panel-specific ComponentLayout)来负责管理其边界内所接触的元素项.面板body元素会铺张至任何空白的位置.任何组件都可以通过设置目标面板的dockedItems配置项属性来相接触,而且对方面板的dock属性也要与之设置好才行.如此一来,Ext3中困难重重的水平界工具条现今已大幅改进其灵活性,在Ext4中轻而易举地实现上述功能. 头部Header的改进 头部He