`

extjs3.0与extjs4.0区别

阅读更多

extjs3.0与extjs4.0区别

<!-- 博文内容 -->
基础上的变化: 

兼容性 
ExtJS4最终会提供一个兼容ExtJS 3的解决方案。 

沙箱模式 
可是使用alias来为组件添加别名,类似以前的Ext.reg,不过alias会用不同的类别区分开来,例如,widget.xxxxx和feature.xxxxx是不一样的,虽然它们都是用alias来定义的,但是类别完全不同。 

包和命名空间的改变 
现在的ExtJS不再使用混乱的分包机制(其实以前的感觉更加直白),例如以前的Window,包名是Ext.Window,但是现在则是Ext.window.Window,Ext.window包下还包括了Ext.window.MessageBox等。SplitButton则是Ext.button.Split。 

创建新的对象 
现在ExtJS使用Ext.define函数来创建组件类,该函数还能实现自动加载JS类(uses属性,需设置Ext.Loader为开启详见下文,看不懂看API),它会自动的完成以前的ns(namespace)功能。例如下面 
Js代码  
Ext.ns("Foo.bar");  
  
Foo.bar = Ext.extend(Ext.util.Observable,{  
        //your code here  
});  
Ext.reg("foobar",Foo.bar);  

所以现在创建一个组件应该是这样的: 
Js代码  
Ext.define("Foo.bar",{  
        extend : "xxxxxx",  
        alias : "widget.foobar"  
        //your code here  
});  


现在ExtJS不再使用new关键字(当然你想用也没关系),而是推荐使用Ext.create函数来解决这个问题,例如以往我们创建一个组件的代码是 
Js代码  
var win = new Ext.Window({  
        //some options  
});  

而现在则是 
Js代码  
var win = Ext.create("Ext.window.Window",{  
        //some options  
});  


新的类加载方法--Class Loading 
现在ExtJS可以动态加载JS文件(类)了,新的Ext.Loader类和一些其它的方法可以完成分别加载所需的JS文件,例如Ext.Loader里的setPath、require等方法函数可以做到动态加载。 
如果要使用这个功能,你首先得启用它: 
Js代码  
Ext.Loader.setConfig({  
      enabled: true,  
      paths: {  
          'My': 'my_own_path'  
      }  
});  

path的意思是,当前引用这个JS的HTML文件同级的my_own_path目录被命名为My,所以以后该目录下的所有类名为My.xxxx的类都能被动态加载。 
例如以下文件目录: 

在定义的时候就是: 
Js代码  
Ext.Loader.setConfig({  
      enabled: true,  
      paths: {  
          'NS': 'app'  
      }  
});  

app/person文件夹中的类名为LKPerson的定义代码为: 
Js代码  
Ext.define("NS.person.LKPerson", {  
    extend : "Ext.panel.Panel",  
        alias : "widget.lkperson",//当然,这个属性不是必须的  
    border : false,  
        initComponent : function(){  
                this.callParent(arguments);//这个arguments你懂,不懂Google  
        }  
})  

注意一点的就是,NS.person.LKPerson中的LKPerson就是文件名称(换句话说文件名必须是LKPerson且必须在person目录下) 

好了,下面看看动态加载的两种方式: 
require的用法如下: 
Js代码  
Ext.require("Foo.bar");  
  
Ext.define("AA.bb.CC",{  
        //some options  
});  


require的意思是:在这个类(AA.bb.CC)被加载之前必须要加载Foo.bar并且被实例化(虽然好用但是劝各位不要滥用)。 

uses的用法如下: 
Js代码  
Ext.define("AA.bb.CC",{  
        uses:["Foo.bar"]  
});  


uses的意思是:在这个类(AA.bb.CC)在运行过程中要用到Foo.bar这个类,用到的时候再加载。 

其它的就不多解释,具体看API(这句话我最后说一遍 ) 

混入类 
将一个类混入到另外一个类中,创建的时候一同创建: 
Js代码  
Ext.define("Dog",{  
    sayHello : function(){  
        alert("AAAA")  
    }  
})  
  
Ext.define("Animal",{  
    mixins:{  
        dog:"Dog"  
    }  
});  
  
  
Ext.onReady(function(){  
    var an = Ext.create("Animal");  
    an.mixins.dog.sayHello();  
})  


静态方法 
现在所有的类(是所有的ExtJS类,Ext.define定义的)都提供静态方法,可以很方便的定义: 
Js代码  
Ext.define('Computer', {  
     statics: {  
         factory: function(brand) {  
             // 'this' in static methods refer to the class itself  
             return new this(brand);  
         }  
     },  
  
     constructor: function() { ... }  
});  
  
var dellComputer = Computer.factory('Dell');  


Config 
这个东西很时髦,看看用法: 
Js代码  
Ext.define("Foo",{  
    config: {  
        title: 'Default Title'  
    },  
    constructor: function(cfg) {  
        this.initConfig(cfg);  
    }  
});  
  
  
Ext.onReady(function(){  
    var an = Ext.create("Foo",{  
        title:"My Title"  
    });  
    console.log(an.getTitle());  
});  

运行以下看看会出现什么?是My Title,config会自动生成getter和setter还有apply方法。 

Ext.env.Browser 
这个东西很好很强大。。。。记得以前有Ext.isIE、Ext.isFF等方法判断浏览器,这次ExtJS 4不仅保留了以前的函数,还提供了更为强大Ext.env包来干这些事情,这个包下面还有其它两个类: 
Ext.env.OS,顾名思义判断操作系统的,印象中ExtJS3中好像也有,不过这次新增了一些操作系统(主要是移动领域的操作系统)。 
Js代码  
if (Ext.os.is.Windows) {  
     // Windows specific code here  
}  
  
if (Ext.os.is.iOS) {  
     // iPad, iPod, iPhone, etc.  
}  


Ext.env.FeatureDetector,这个绝对是新加的,主要用于判断HTML5和CSS3的,例如 
CSS3/动画/转换
Canvas/ SVG/ VML
触摸屏是否可用/方向
地理位置(HTML5的东西相信不陌生吧?)
SqlDatabase
WebSockets
History
音频
视频

Lang包的修改 
不知道lang是什么意思?(想想java.lang.String和java.lang.Number吧) 
现在ExtJS 4一直在为新的ECMAScript标准做准备,这就是为什么要有这个包存在的原因,新的ECMAScript标准大家可以在ActionScript3中详细看看,AS3基本上是遵循了下一代ECMAScript标准的,例如数据类型String、Number、Array、uint等等,ExtJS 4为了能与下一代的ECMAScript标准兼容,提前提供了这些东西的JS实现。 

Ext.Function 
这个东西不知道大家平时用不用(也许大家用了没察觉到),我是经常用的。例如在以往的ExtJS版本中的代码: 
Js代码  
function foo(){  
       //这里  
}.createDelegate(scope,arguments);  

现在变成了(这里使用了一个综合的例子,大家可以重点看看bind的用法): 
Js代码  
Ext.define("Foo",{  
    config:{  
        bar:"I don't need sex,the government fucks me every day!"  
    },  
    constructor : function(cfg){  
        this.initConfig(cfg);  
    }  
});  
  
function fun(str){  
    if(str){  
        alert(str);  
        return;  
    }  
    alert(this.getBar());  
}  
  
Ext.onReady(function(){  
    var foo = Ext.create("Foo");  
    Ext.bind(fun,foo)();//后面的括号你懂  
    //如果要传递参数可以以数组的形式放入,例如这样:  
    //Ext.bind(fun,foo,["私はセックスを必要としない、政府は毎日私をファック!"])();  
});  

好了,我承认我有点那啥,不过希望不影响你继续读下去的兴趣。 

相同的还有 
ExtJS 3中的 
Js代码  
myFunction.defer(1000, scope);  


变成了4中的 
Js代码  
Ext.defer(myFunction, 1000, scope);  

还有callBack变成了pass,其它的自己去发掘。 

ExtJS的工具, 
就是它: 

使用工具来编译你的JS,别想歪了,我知道JS是解释性的,详细的先看看这篇文章关于JSBuilder的作用: 
http://hi.baidu.com/mallor/blog/ ... dcbadc0b46e074.html 

ExtJS的senchaSDKtools里面还提供了theme的制作(命令行的??!!!),如果嫌ExtJS审美疲劳了可以试试这个。没玩过,所以不多解释,这里就告诉大家有这么回事儿就行了。 

关于大家最关心的数据 
这个Store想必是最关心的吧?(好了,外面貌似下冰雹了我晕,楼顶啪啪的!没时间去核实有北京的2011年七月二十六号晚上21:40:00左右的网友如果核实了留言证实一下)。 
嗯,说到冰雹,我觉得转载这篇文章的人应该注意一下告诉出处,这篇文章来自流水无心的ITEYE博客http://andy-ghg.iteye.com/ 

扯远了,再回来继续说,这个Store现在改变可不小,详细的参看一下这个文章 
[url src='http://www.sencha.com/blog/ext-js-4-anatomy-of-a-model/']Countdown to Ext JS 4: Anatomy of a Model[/url] 
好了,我知道我很懒,但是我可以简单说一下:modal代替了以往store中fields:[""]的功能,但是我没用(实际使用有问题- -!学艺不精),其实它是一个对象。。。对的是对象,MVC中的Model,好了,具体看API中关于MVC的介绍吧。 
Store中有一个变化就是baseParams变程了extraParams,注意下。每一个Store必须(?是否必须我也不知道,不过我现在是这么用的)要有一个Proxy且必须给一个type,现在的Store是这样写的: 

Js代码  
Ext.define('User', {  
    extend: 'Ext.data.Model',  
    fields: [  
        {name: 'name',  type: 'string'},  
        {name: 'age',   type: 'int'}  
    ]  
});  
  
Ext.create("Ext.data.Store",{  
    modal:"User",  
    proxy{  
        url : "xxxx.do",  
        type : "ajax"  
    }  
})  
确实像那么回事儿,但是我不买账。。。在实际项目中我还是用我的fileds,在没彻底搞明白之前,不太敢这么弄。 
当然Store的改动远远不止这些,例如Proxy中新增了一个localStorage(Ext.data.proxy.LocalStorage)用于过渡到HTML5的localStorage等等。 
Draw绘图 
这个东西喜欢吗?我喜欢嘿嘿 
ExtJS4中提供了绘图,夸浏览器的,它内部实现了Canvas、SVG、VML等绘图方法,所以不同的浏览器它会自动使用该浏览器支持的绘图方式。支持IE6789、基于Gecko的浏览器(FF)、基于WebKit内核的浏览器(Chrome)。 

FX 
从ExtJS提供这个以来我就不怎么用,原因很简单,浪费我的资源。。。。在新的ExtJS中,提供了类似Flex中关于动画的包方法Ext.fx.target.*,因为我不怎么用,所以不再阐述。 
布局 
这里的改变也很大,但是我觉得我在这个博客里说再多也没有你自己去运行它的例子来得要直观。 
好了,说了这么多,当然没有说完。。。。更多细节的改变的大家自己去发掘,推荐一篇文章《ExtJS 4.0 Developer Preview》,地址我忘了,网络时代相信对你来说找到它不难。

<!-- 博文内容 end --><!-- 绿色通道 -->

分享到:
评论

相关推荐

    ExtjJS 3.0中文API 和Extjs4.0 API

    本帮助文件中的EXTJS 3.0和4.0 中文版API函数

    Extjs4.0、Extjs3.0教程CHM版和PDF版,中文版API

    本资源包含ExtJS 4.0和3.0的教程及API文档,对于学习和掌握这个框架至关重要。 首先,我们来看ExtJS 4.0的教程。ExtJS 4.0引入了重大的更新,包括全新的架构、改进的布局系统和更丰富的组件库。其中,新架构引入了...

    Extjs3.0学习实例

    在"ExtJS3.0学习实例"中,你可以深入学习到以下几个核心知识点: 1. **组件系统**:ExtJS的基础是其组件模型,包括按钮、表格、面板、表单、树形视图等。这些组件可以组合成复杂的用户界面,并且具有高度的可配置性...

    Spring3.0+Hibernate4.0+SpringMVC整合ExtJS4

    在本项目中,我们探讨的是如何将三个主流的Java企业级框架——Spring 3.0、Hibernate 4.0和Spring MVC与JavaScript前端框架ExtJS 4进行深度整合,以构建一个高效、灵活且功能丰富的Web应用。这个整合旨在提供一个...

    extjs 4.0 extjs

    标题提到的是ExtJS的4.0版本,这是一个重要的里程碑,因为它引入了许多新功能和改进,与之前的2.0和3.0版本有显著区别。 在ExtJS 4.0中,最显著的变化之一是其模型-视图-控制器(MVC)架构的增强。这个版本提供了更...

    extjs精美主题

    例如,EXTJS 3.0引入了数据绑定和MVVM模式,4.0带来了布局管理的重大改进,5.0则加强了触摸事件和移动设备适配。 主题包中包含的例子作为参考,可以帮助开发者理解如何应用和自定义EXTJS的主题。这些示例可能包括...

    extjs日期显示(如何转换日期格式)

    第二步:在 sso-web/pom.xml 中注释掉 spring3.0 的 jackson 依赖,使用 4.0 的 jackson 依赖。这样可以确保使用的是最新版本的 jackson 依赖项。 第三步:使用 SimpleDateFormat 的构造函数将日期格式数据转换为 ...

    jbpm4.0+ext3.0+spring+hibernate整合实例

    EXTJS是一个基于JavaScript的富客户端UI库,EXT3.0是EXTJS的一个版本。它提供了大量的可重用的组件,如表格、树形视图、图表等,可以创建出美观且功能丰富的Web应用程序。EXT3.0支持AJAX,使得用户界面可以实时更新...

    Extjs经典入门资料大全

    资源名称:Extjs经典入门资料大全资源目录:【】Ext3.0中文API【】ExtJS2.2开源网络硬盘系统【】Extjs4.0学习指南(中文)【】Extjs4.0学习指南(中文)【】EXTJS4.0视频教程配套代码【】extjs入门案例大全【】ExtJS实用...

    ExtDesigner-1.2.2-48 Ext界面设计工具

    这是从Sencha Touch官网上下载的Ext Designer的设计工具,我初步测试了一下,对于extjs3.0使用比较好,对于Extjs4.0的支持可能有一点问题,可能是本人太菜,大家可以研究一下。

    extjs日期显示(如何转换日期格式).docx

    2. 在 ssoweb/pom.xml 中注释掉 spring3.0 的 jackson 依赖,使用 4.0 的 jackson 依赖。 3. 在 spring 中配置消息转换器,使用 MappingJackson2HttpMessageConverter 对 responseBody 中的日期类型进行转换。 日期...

    FineUI控件库_v3.3.0

    IE 7.0+、Firefox 3.6+、Chrome 3.0+、Opera 10.5+、Safari 3.0+ 授权协议 Apache License 2.0 (Apache) 注:ExtJS 库是在 GPL v3 协议下发布。 FineUI严格遵守 ExtJS 关于开源软件的规则,不再内置 ExtJS ...

    log4Net详解(共2讲)

    Extjs在经过两年的发展,Ext JS从2.0版开始,越来越受用户欢迎,今年,Extjs不但推出3.0版本,而且还推出了Ext Core,准备在Web2.0网站开发中占一席之地,如在 Extjs2.x版本中为人所诟病的速度问题在ExtJs3.0中有所...

    开发技术方法

    - ExtJs从2.0开始逐渐受到用户喜爱,随着版本的迭代,性能得到了显著提升,特别是在3.0版本中解决了2.x版本中的速度问题。 - ExtJs 3.2引入了移动组件,进一步扩展到移动市场,4.0版本则增加了对HTML5的支持和画布...

    前端api集合

    ExtJS(现称Sencha Ext JS)是一个强大的JavaScript库和框架,主要用于构建富互联网应用(RIA)。Ext3.0版本包含了许多组件和布局管理,如表格、树形视图、面板、窗口、表单等,以及数据绑定和Ajax交互功能,极大地...

    ASP.NET软件工程师

    如使用的开发环境为VS2010,.net 4.0类库,SQL erver2008,LinQ技术,.net MVC3.0,jquery,extjs,Silverlight4等富客户端技术等,保证了技术在三年之内不会落伍 6、首次采用: 视频授课+上机课作业练习+上机课作业讲解+...

    一步一步创建Sencha Architect Files(aux)

    这篇文章将详细介绍如何利用Sencha CMD 4.0和Sencha Architect 3.0来创建自定义的Architect Files,以便解决特定的开发需求,例如在Extjs 4.2中为Number Field添加千位分隔符支持。 ### 一、环境准备 1. **安装...

    淘宝上价值380元的网站源代码打包-BLOG 1of4

    [博客空间]ExtJs单用户Blog系统后台源码_extblog.rar [博客空间]Fair Blog 1.0.0 Beta_fairblog.rar [博客空间]FcDigg 0.1 Beta_fcdigg.rar [博客空间]FDW.S BLOG源码_myblogs.rar [博客空间]Finesl v1.7.4.50 SP1_...

    淘宝上价值380元的网站源代码打包-BLOG 2of4

    [博客空间]ExtJs单用户Blog系统后台源码_extblog.rar [博客空间]Fair Blog 1.0.0 Beta_fairblog.rar [博客空间]FcDigg 0.1 Beta_fcdigg.rar [博客空间]FDW.S BLOG源码_myblogs.rar [博客空间]Finesl v1.7.4.50 SP1_...

    淘宝上价值380元的网站源代码打包-BLOG 3of4

    [博客空间]ExtJs单用户Blog系统后台源码_extblog.rar [博客空间]Fair Blog 1.0.0 Beta_fairblog.rar [博客空间]FcDigg 0.1 Beta_fcdigg.rar [博客空间]FDW.S BLOG源码_myblogs.rar [博客空间]Finesl v1.7.4.50 SP1_...

Global site tag (gtag.js) - Google Analytics