美文网首页Java Web
ExtJS 使用感悟

ExtJS 使用感悟

作者: 研发部的查查 | 来源:发表于2016-12-26 17:26 被阅读573次

前言

各位前辈在上小弟拱礼,小弟唤作查查,何为查查,与渣渣者无水矣,意在小弟虽初出茅庐然已成自我,自认非渣渣尔,然则门下自识术业未成当以与人谦逊见贤思齐,遂以铭。余非师出名门,然从业两载有余,闲暇之时拜读金典,已有些许文章,虽略显轻浮,但玉不雕不成器,在下献丑与众位点拨,全当玩耍,不当之处望各位雅正。

(这逼装的怎么样)


背景

现在市场上流传着很多近几年新生的优秀框架,虽然ExtJS发布的时间很早,现在应该算是古董级别的了,在当时也提出了很多超前的思想如:依赖注入,模块化等,现在一代比一代更优秀,但貌似市场上使用的厂子并不是很多,也有人对它的看法还停留在三代的版本上(现在已经到六代了),本人比较热衷社区讨论,但很少有人对ExtJS有最新的认识,一直在找相关方面的文章,但要么是比较陈旧的,要么是手册类的,因而不才整理出这篇拙作与众位把玩。

巨人ExtJS

ExtJS这个框架有些年头了(07年发布),对于一些从业时间有段时间的人来说都从各方面了解过,有人评价说它“功能丰富,无人能出其右”,但缺点也是存在的,太大,学习曲线陡峭,但这些缺点在我认为确实相对的,如JQuery UI等。

在这里称它为“巨人”一点都不为过,

第一,一般的小型项目hold不住这个巨人,因为收费和学习曲线陡峭很多小公司直接就不考虑它。

第二,身躯太庞大,丰富的组件导致它太重,非大中型管理系统很多难将它的特点发挥出来,它在复杂的业务处理中能节省出大量精力,也就是开发速度快,可以说一个中小型子系统,让一个熟练的前端在一到两周就全部能完成,还是不加班的那种。

第三,就是不在乎你用不用,反正老子是给大厂子做的。

有人说过它丑,烦请查阅07年以前的富客户端长什么样,大家的都知道前端框架都会有自定义样式的设定,当然ExtJS1.0也有,不过那时候多数情况下前端是由后端人员来做的,再加上学习曲线陡峭,所以很少去自定义CSS。且自带那几套皮肤,时间长了审美疲劳之后觉得有点丑,现在看来较之落后,不过现在有好几套自带皮肤,同时像HTML5 CSS3等新标准都已经支持,而且在兼容性方面优化的相当不错,几乎可以不用操心。

相比较同时期的JQuery,ExtJS应该说是一个完整的前端框架,而JQuery是一个扩展库,类比Easy UI是在晚于ExtJS之后的13年发布的,在默认的皮肤和样式上它是照搬ExtJS的classic皮肤的样式,相对ExtJS它比较轻,基于JQuery容易扩展,自己写样式也方便,不是那么干涩让人不太容易琢磨。但熟知JavaScript设计模式的人都知道,JQuery很容易没有编码结构可言,而ExtJS可以说已经很接近面向对象这个概念。

之后在13年发布的ExtJS 4以及后续版本,可以使用Sencha cmd可以构建MVC模式的前端项目,以及完整的模块化管理方案。还推出了一个基于ExtJS的sencha touch的移动端框架,不过在后来的版本中好像取消了,现在的ExtJS 5和6版本都可以直接用做移动端开发,也就是默认支持触屏的事件操作,但没深入了解过,后面再补充吧。

ExtJS简单实验

我喜欢ExtJS的一个重要原因就是它的API很方便查阅,大家可以自行去看一下。

官方API:http://docs.sencha.com/extjs/6.0.0/

ExtJS 使用感悟

ExtJS使用的是盒子模型(也叫做容器),最常用的容器有Panel和Container先来一段代码。

Ext.create('Ext.panel.Panel',{

  title: 'Hello',

  width: 200,

  html: 'World!',

  renderTo: Ext.getBody()

});

ExtJS 使用感悟

这样便生成了一个容器,同时可以在里面增加子元素(items),如:button,combox或者其他容器。

Ext.create('Ext.panel.Panel',{

  title: 'Hello',

  width: 200,

  height: 300,

  items: [{

  xtype: 'button',

  text:'OK',

  handler: function(){

     alert('I\'m a Button');

  }},{

  xtype: 'panel',

  html: 'I\'m a child Panel'

}],

enderTo: Ext.getBody()

});

ExtJS 使用感悟

这个是使用另一套皮肤crisp有Touch模式,也就是兼容了,触屏操作。

也可自定义组件来继承ExtJS的组件并扩展它,如:我们现在要做一个字体样式固定且带一个确定和取消按钮的容器。

Ext.define('MyPanel',{

extend: 'Ext.panel.Panel',//该行继承自Panel,即继承Panel的所有属性和法

width: 200,

height: 200,

margin: '20',

bbar: [

{ xtype: 'button', text: '确定' },

{ xtype: 'button', text: '取消' }

],

bodyStyle: {

color: 'red'

},

html: 'I\'m a Panel'

});

new MyPanel({

renderTo: Ext.getBody()

});

ExtJS 使用感悟

这个Ext.define其实是ExtJS中定义类的方法,写法可能不一样,但几乎完全模拟了面向对象的设计模式。如:

Ext.define('My.awesome.Class',{

someProperty:'something',

someMethod:function(s){

alert(s+this.someProperty);

}

...

});

varobj=newMy.awesome.Class();

obj.someMethod('Say ');

ExtJS在某种程度上是提供了富客户端项目结构乱的解决方案,若是有人非要提ReactJS AngularJS等等,如果非要用ExtJS来做门户网站,ReactJS AngularJS之类用来做富客户端。这就好比用菜刀去砍柴,用斧子去切菜一样,虽然不是非不可以,但其中有数不其尽的坑。

ExtJS和Sencha Cmd---前端的MVC设计模式

ExtJS在4版本的时候同时发布了Sencha Cmd这个工具,Sencha Cmd是针对ExtJS设计的项目构建工具,通过命令可以构建MVC模式的项目还是比较方便的,我们以ExtJS5.0为例演示一下。

安装过程有兴趣的自行查阅一下手册,在官方文档里都有,或者其他博客写的都很详细,我就不再累赘了。

项目结构

通过sencha generate app MyApp D:\MyApp这句命令生成项目MyApp

ExtJS 使用感悟

编码目录再app中,可以看到main文件夹中有三个文件分别是

Main.js----视图view

MainController.js----控制器Controller

MainModel.js---- ViewModel

同时也可以在sass目录写*.sass样式,这些会通过sencha app build打包完成

其实在长期的实践中我发现它的MVC模式并不是需要严格的遵守,也可以混着来,不过根据个人习惯我还是喜欢分清一些好。项目生成好后通过sencha app build编译项目,\MyApp\build\temp\production可以看到编译好的项目,之后就可以通过浏览器来查看。这里要说明一下sencha产生的项目必须要一个服务才能打开,我们可以把项目放到一个服务中查看,可以用sencha cmd自带的服务工具。通过sencha web start开启。之后访问http://localhost:1841/即可。这个端口也是可以配置的。

ExtJS 使用感悟 ExtJS 使用感悟

Main.js

Ext.define('MyApp.view.main.Main', {

extend: 'Ext.container.Container',

requires: [ //引入需要的模块

'MyApp.view.main.MainController',

'MyApp.view.main.MainModel'

],

xtype: 'app-main', //自定义xtype名称,可以在其他模块中通过这个type调用这个模块

controller: 'main', //注入main controller

viewModel: {

type: 'main' //注入main viewModel

},

layout: {

type: 'border'

},

items: [{

xtype: 'panel',

bind: {

title: '{name}'

},

region: 'west',

html: 'This area is commonly used for navigation,for example, using a "tree" component.',

width: 250,

split: true,

tbar: [{

text: 'Button',

handler: 'onClickButton'//事件注册会在controller中映射

}]

},{

region: 'center',

xtype: 'tabpanel',

items:[{

title: 'Tab 1',

html: 'Content appropriate for the currentnavigation.'

}]

}]

});

MainController.js

Ext.define('MyApp.view.main.MainController',{

extend: 'Ext.app.ViewController',

requires: [

'Ext.window.MessageBox'

],

alias: 'controller.main', //声明别名叫main的controller

onClickButton: function () {

Ext.Msg.confirm('Confirm', 'Are you sure?', 'onConfirm', this);

},

onConfirm: function (choice) {

if (choice === 'yes') {}}

});

MainModel.js

Ext.define('MyApp.view.main.MainModel', {

extend: 'Ext.app.ViewModel',

alias: 'viewmodel.main', //声明叫main的viewmodel

data: {

name: 'MyApp'

}

//TODO - add data, formulas and/or methods to support your view

});

当前是初始化的一个界面,可以根据需求自行更改。至此就简单说了一下ExtJS和Sencha Cmd,后面若是有需要详细教程的,我会再整理一份。

关于Sencha Cmd我也是在工作的时候一点点上手的,虽然鄙人才疏学浅但接受新事务比较快,且自己喜好钻研,就多看了一些,有些自己的看法且与大家说道说道。

首先实际是用过的朋友就会知道在build完成后把所有的文件集中的一个文件里面去(app.js),有时候会达到好几兆,我见过最大的有12M,加载这这个js会很慢,这似乎是ExtJS设计的不合理之处,但其实不然,不知道大家注意到没有,sencha构建项目和编译项目的命令有没有什么特别之处,

sencha generate app MyApp D:\MyApp

sencha app build

它都是以app开始的,也就是sencha是在创建应用而不是web项目,这点我觉得很多人都没注意过,针对这些我特地翻墙出去查了一些资料,没找到实际的例子,估计都是内部系统,不让人看,倒是在有些论坛的个别回答里有只言片语的描述,他们都是用来做exe应用的,加载的都是本地资源也就不存在资源加载缓慢的问题了。而我们的web应用则无法避免资源加载时延过长这个问题,针对这点我特地做个一个模型,且叫它《ExtJS非阻塞加载设计模式》,后面我会做个专题详细说明。

时间仓促不成文章,望众位指正。

相关文章

  • ExtJS 使用感悟

    前言 各位前辈在上小弟拱礼,小弟唤作查查,何为查查,与渣渣者无水矣,意在小弟虽初出茅庐然已成自我,自认非渣渣尔,然...

  • ExtJs layout布局介绍

    ExtJs layout布局介绍 ExtJs是一个大而全的框架,页面布局主要使用js来进行控制。为了能更高效方便的...

  • Sencha Cmd使用指南

    查看Cmd版本 使用 sencha 命令查看当前cmd版本信息 显示如下 使用Sencha Cmd创建Extjs ...

  • Sencha ExtJS5.x的类系统讲解

    ExtJS5拥有许许多多的类,到目前为止使用ExtJS开发的人员有200多万,他们来自不同的地域,拥有不同的背景。...

  • ExtJS 6.2 基础使用

    一、 安装: 下载两个压缩包:分别是 ext-6.2.0-gpl(这个是Extjs 的sdk文件,创建新项目的时候...

  • extjs

    http://extjs.org.cn/node/125中文extjs网站

  • ExtJs4 API文档

    ExtJs_v4.1.0 zh-CN ExtJs_v4.2.0 en-US

  • ExtJs4 API文档

    ExtJs_v4.1.0 zh-CN ExtJs_v4.2.0 en-US

  • 基于Extjs 6.2 admin-dashboard 模板创建

    测试环境 Extjs: version.release=6.2.0 Extjs目录: D:\ext6工作目录:...

  • Extjs6.0源码分析-大纲

    一、Extjs介绍,引用,文档,工具 二、Extjs典型项目各文档内容 private,static,config...

网友评论

  • 轻庐踏雪:博主,最近我也接触到了这个,但是不明白数据交互是怎么在那弄的,往往不知道,该把与后台进行交互的ajax代码写在哪里。
    研发部的查查:@轻庐踏雪 除夕?????好吧,按架构是要写在controller里,但实际是哪里都可以写。只要不打乱你自己的项目结构的合理性。
  • 编码亦术:没想到是好久的文章,以前接触过这个,最近换公司用的是这个,特地来学习下,讲的很是细致
    研发部的查查:@沉浮aim 这个本身就比较庞大,可以说是迄今为止最庞大的前端框架,刚开始做肯定有些吃力,加油。
    编码亦术:@研发部的查查 看了两天一堆问题,这种组件化的开发看样子必须时间积累才行
    研发部的查查:@沉浮aim 相互学习
  • 47ff1ff8305b:非常好,我正在学,与君共勉。
    研发部的查查:@我是你忠哥 谢谢,共同学习。

本文标题:ExtJS 使用感悟

本文链接:https://www.haomeiwen.com/subject/ggyjvttx.html