Extjs前端框架解决了什么问题
Extjs 作为一套企业级富客户端前端开发框架,主要解决了以下问题:
1、DOM
Ext.Element:
Ext.Element.get()快捷方式Ext.get(),只能以dom的id作为参数去获取Ext.Element对象(Ext.get返回的结果是Ext.Element对象的实例, .dom才是原生的dom)。在Ext中所有组件都是有Id的,这个Id可以是手动指定,也可以是Ext的Id生成机制自动生成。
Ext.DomHelper
主要是操作dom。
Ext.DomHelper.append()是一个很常用的方法,值得一提的是由于Ext采用了对象缓存机制,在MVC模式下在不同的tab切换的时候如果重新渲染dom,使用Ext.DomHelper.append()添加的元素不会丢失,但是使用原生或者其他框架(比如jq)就会丢失。这就是我说她像一个的老婆原因之一。看几个用法:
一、直接字符串
Ext.DomHelper.append(元素id,'<a href="#">你好</a>');
二、对象
Ext.DomHelper.append(元素id,{tag:ul,children:[{tag:li,html:'一个ul列表的第一项'},{...}]});
Ext.DomHelper.insertHtml()另一个很常用的方法
Ext.DomHelper.insertHtml(位置参数,dom,'<a href="#">你好</a>');
位置参数:beforeBegin、afterBegin、beforeEnd、afterEnd
Ext.DomHelper.overwrite(dom的id,'<a href="#">你好</a>');相当于原生的 .innerHtml="";所以是重写容器中的内容。
Ext.DomQuery 查找dom元素的利器
Ext.query('div')、Ext.query('[id="domId"]')、Ext.query('div:first-child').支持绝大部分的CSS3选择器
Ext.query() 是Ext.DomQuery.select()的快捷方式, 返回标准dom。
2. UI Component(组件):UI组件丰富且方便扩展
部分组件class和xtype列表
|
类型 |
Class (点击查看具体API) |
xtype | 备注 |
| 容器 | Ext.container.Container | container | 基本容器 |
| Ext.container.Viewport | viewport | 自适应窗口 | |
| Ext.form.Panel | form | 表单 | |
| Ext.menu.Menu | menu | 菜单 | |
| Ext.panel.Panel | panel | 面板 | |
| Ext.grid.Panel | gridpanel、 grid | 网格面板 | |
| Ext.panel.Table | tablepanel | 表格面板 | |
| Ext.tab.Panel | tabpanel | Tab选项卡面板 | |
| Ext.toolbar.Toolbar | toolbar | 工具栏 | |
| Ext.tree.Panel | treepanel | 树形结构面板 | |
| Ext.window.Window | window | 窗口 | |
| 表单 | Ext.form.Panel | form | 表单 |
| Ext.form.field.Checkbox | checkboxfield、checkbox | 复选框 | |
| Ext.form.field.ComboBox | combobox、combo | Combo选择器 | |
| Ext.form.field.Date | datefield | 日期选择器 | |
| Ext.form.field.Display | displayfield | 只读文本字段 | |
| Ext.form.field.File | filefield、fileuploadfield | 文件上传 | |
| Ext.form.field.Hidden | hiddenfield、hidden | 隐藏项 | |
| Ext.form.field.HtmlEditor | htmleditor | Html编辑组件 | |
| Ext.form.field.Number | numberfield | 数字文本输入框 | |
| Ext.form.field.Radio | radiofield、radio | 单选框 | |
| Ext.form.field.Text | textfield | 文本输入框 | |
| Ext.form.field.TextArea | textareafield、textarea | 多行文本输入框 | |
| Ext.form.field.Time | timefield | 时间选择器 | |
| 工具栏 | Ext.toolbar.Toolbar | toolbar | 工具栏 |
| Ext.toolbar.Fill | tbfill | 右对齐分隔符 | |
| Ext.toolbar.Paging | pagingtoolbar | 分页工具栏 | |
| Ext.toolbar.Separator | tbseparator | 垂直分隔符 | |
| Ext.toolbar.Spacer | tbspacer | 空白分隔符 | |
| 菜单 | Ext.menu.Menu | menu | 菜单容器,可包含菜单组件、其他组件 |
| Ext.menu.CheckItem | menucheckitem | 切换复选框 | |
| Ext.menu.ColorPicker | colormenu | 颜色选择器 | |
| Ext.menu.DatePicker | datemenu | 日期选择器 | |
| Ext.menu.Separator | menuseparator | 分隔符 | |
| 其他 | Ext.button.Button | button | 普通按钮 |
| Ext.ProgressBar | progressbar | 进度条 | |
| Ext.slider.Slider | slider、sliderfield | 滑动条 |
容器层次结构:

3. Layout布局
ExtJs常见的布局方式有:border、form、absolute、column、accordion、table、fit、card、anchor
另外,不常见的布局有:tab、vbox、hbox
4. 网络请求(通信)
Ajax交互方式 :Ext.Ajax.request(store的数据请求就是这种)
Form交互方式: formPanel.getForm().submit
formPanel.getForm().load() 加载数据
5、Utililty(工具库)
Ext.util.CSS:有效的控制样式表,可以多级的删除修改以及交换
Ext.util.ClickRepeater: 单击一次,如果不失去焦点。系统自动会去请求 主要用于挤房器和网络忙的时候请等待的功能
Ext.util.DelayedTask :在规定的时间之后调用函数
Ext.util.Format :格式化表示数值和日期等
Ext.util.MixedCollection对象集合类,可以增加对应的键值对,相当于java的一个Map集合,适合做缓存和静态常量,方便管理
Ext.util.TashRunner:主要操作的为线程,可以实现线程的运行和停止,多个线程之间互不影响,与java中的多线程机制相似
6、Templating(模板集成)
XTemplate是Extjs里面的模板组件.
Templete 是模板之意,就是定义一段 HTML 代码,并放置若干个{}作为占位符,可以实现部分逻辑,包括循环、判断等
运行时将数据填充到{}中去,从而实现UI和数据的分享。看来看去,和java中的MessageFormat及C#中的string.formate很像。
模板的使用为增加了代码的复杂度,并且把HTML代码与JS混全,要考虑一下再使用。
8、Routing(路由):已经可以使用Ext.util.Histroy类来处理历史记录的变化 Extjs5中可以使用
Ext.define(‘DemoApp.controller.Main', {
extend : 'Ext.app.Controller',
routes : {
'user/:id' : 'getUser'
},
getUser : function(id) {}
});
9. Event事件
Ext中的事件遵循树状模型,和事件相关的类主要有这么几个:
Ext.util.Observable、 Ext.lib.Event、Ext.EventManage,Ext.EventObject。
Ext使用Ext.lib.Event、Ext.EventManager和Ext.EventObject对原生浏览器事件进行了封装,最后给我们用的是一套统一的跨浏览器的通用事件接口。HTML元素本身已经支持事件,为什么基本上所有的主流JS框架都要实现自己的事件机制呢?一个最主要的原因是HTML元素对事件的处理是通过简单的单一绑定实现的,如果不进行封装,事件只能绑定到一个事件处理句柄。如下面代码所示:
var e = document.getElementById("test");
e.onclick = function() { alert("handler1") };
e.onclick = function() { alert("handler2") };
单击test按钮后会发现只会弹出一个显示"handler2"的提示框,因为第一个被覆盖。而使用像Ext、jQuery这样的框架就不用担心这个问题,同一个事件可以依次绑定多个事件处理句柄,如下代码所示:
Ext.onReady(function () {
var test = Ext.get("test");
test.on("click", function () {
alert("handler1");
});
test.on("click", function () {
alert("handler2");
});
});
Ext实现自己的事件机制,原因很多,比如为了兼容不同浏览器之间的差异等。Ext对原生浏览器事件的封装都在上面所说的几个类中。
10. 数据绑定及事件绑定: 双向数据绑定
一张图告诉你,如果进行数据绑定和事件绑定:

11. Architecture(架构):MVVM
Ext JS提供了mvc和mvvm的应用程序框架支持,这两种架构方法都是关注于将应用程序代码和业务逻辑分离。每一种方法都有自己的优点
(M:Model)模型:这是为您的应用程序的数据。一组类(称为“模型”)定义了字段的数据(如用户模型的用户名和密码字段)。通过数据包模型知道如何展示自己,可以通过关系与其他模型关联。模型通常用于给存储提供数据的表格和其他组件。模型也是一个理想的选中为任何你可能需要的数据逻辑,比如验证、转换等。
(V:View)视图:一个视图是任何类型的组件,是视觉表示。例如,网格,树和面板都是考虑的观点。
(C:Controller):控制器:控制器是用来使你的应用程序工作的视图逻辑的管理职责位置,这可能需要渲染视图、路由实例化模型,和任何其他类型的应用程序逻辑。
(vm: viewmodel):视图模型是一个管理制定视图的数据管理器。它允许感兴趣的组件绑定和数据更改通知。
extjs优点:
1. 丰富的UI组件,且容易扩展,非常适合有复杂业务的企业应用系统。
2. 开发简单,支持MVVM,职责分工清楚明了,基本上纯JS代码,省心,省力。
3. 界面友好,基本不用美工设计
4. 跨浏览器,及版本上支持的不错。IE可以支持到IE8
extjs缺点:
1. 库比较大,比较适合内网运行。
2. 想修改界面样式,比较难
3. 学习的成本稍大一些。
4..比较难与外部模块进行自由组合。
附Ext API:http://docs.sencha.com/extjs/6.2.1/modern/Ext.html
Extjs前端框架解决了什么问题的更多相关文章
- ExtJS前端框架EXT弹出窗口事件
https://blog.csdn.net/alsyuan/article/details/73240841 Ext.MessageBox.alert()Ext.MessageBox.alert()提 ...
- 发现 一个业务管理系统 解决了 orm 和 前端框架 剩下的 是 业务逻辑 了 。 哈
解决了 orm 和 前端框架 剩下的 是 业务逻辑 了 . 哈 还有 各种 aop 组件 呢 . 大家 high 来 准备 用 fluent data 和 mysql 写一个 wcf 的 接口呢. ...
- 前端框架——BootStrap学习
BootStrap简单总结下:1.栅格系统,能够很好的同时适应手机端和PC端(及传说中的响应式布局) 2.兼容性好 接下来是对BootStrap学习的一些基础案例总结和回顾: 首先引入:bootstr ...
- 前端框架 EasyUI (0) 重新温习(序言)
几年前,参与过一个项目.那算是一个小型的信息管理系统,BS 结构的,前端用的是基于 jQuery 的 EasyUI 框架. 我进 Team 的时候,项目已经进入开发阶段半个多月了.听说整个项目的框架是 ...
- 10大H5前端框架
作为一名做为在前端死缠烂打6年并且懒到不行的攻城士,这几年我还是阅过很多同门从知名到很知名的各种前端框架,本来想拿15-20个框架来分享一下,但在跟几个前辈讨教写文章的技巧时果断被无情的打击了,所以这 ...
- Web前端框架与类库的思考
说起前端框架,我也是醉了.现在去面试或者和同行聊天,动不动就这个框架碉堡了,那个框架好犀利. 当然不是贬低框架,只是有一种杀鸡焉用牛刀的感觉.网站技术是为业务而存在的,除此毫无意义,框架也是一样.在技 ...
- React 还是 Vue: 你应该选择哪一个Web前端框架?
学还是要学的,用的多了,也就有更多的认识了,开发中遇到选择的时候也就简单起来了. 本文作者也做了总结: 如果你喜欢用(或希望能够用)模板搭建应用,请使用Vue 如果你喜欢简单和“能用就行”的东西 ...
- Web前端框架汇总
在做web开发的时候难免遇到一个问题,那就是,选择什么样的框架.下面把前端的框架简单的列一下. 1.flex Apache基金会今天发布了Flex 4.8版本,这是Adobe将Flex捐献给Apach ...
- 如何选择前端框架:ANGULAR VS EMBER VS REACT
最近一段时间是令前端工程师们非常兴奋的时期,因为三大Web框架陆续发布新版本,让我们见识到了更强大的Web框架.Ember2.0在2个月之前已经发布,从1.0升级到2.0非常简单.几周之前React发 ...
随机推荐
- go学习笔记二:运行使用命令行参数
本文只作为博主的go语言学习笔记. 对命令行参数的解析,只是在运行时使用的,比如以下命令:go run gomain -conf conf.toml 没有办法再go build时使用. 一.运行时命令 ...
- Python3.6编译安装以及python开发之virtualenv与virtualenvwrapper
Python3.6编译安装 下载python源码包 先到安装目录 cd /opt 下载源码包 wget https://www.python.org/ftp/python/3.6.2/Python-3 ...
- Unity3D优化技巧系列七
笔者介绍:姜雪伟,IT公司技术合伙人.IT高级讲师,CSDN社区专家,特邀编辑.畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...
- Java 8 : Predicate和Consumer接口
1.consumer jdk 1.8 的 Iterable 接口中的 forEach 默认方法: public interface Iterable<T> { default void f ...
- awk的常用操作场景以及工作中涉及到的一些场景实例
废话不多说,直接上这个实例: 一. 统计apache日志单ip访问请求数排名: 假设apache日志内容access.log内容为: /Dec/::: +] - /Dec/::: +] - /Dec ...
- HDU1176:免费馅饼(dp,数字三角形的应用)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1176 这题就是数字三角行的变形,可惜对于我这个渣渣来说就是没发现,区别是他可以保持在三个点,他左边的点,右 ...
- 查看Oracle相关日志 ADRCI
ADRCI 进去以后 show home
- flask扩展 -- flask-script
Flask-Scropt插件:为在Flask里编写额外的脚本提供了支持.这包括运行一个开发服务器,一个定制的Python命令行,用于执行初始化数据库.定时任务和其他属于web应用之外的命令行任务的脚本 ...
- Django:学习笔记(8)——视图
Django:学习笔记(8)——视图
- ruby中的可调用对象--proc和lamdba
ruby中将块转变成对象的三种方法 ruby中的大部分东西都是对象,但是块不是.那么,如果你想存下来一个块,方便以后使用,你就需要一个对象.ruby中有三种方法,把块转换成可以利用的对象. Proc. ...