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发 ...
随机推荐
- C++标准库头文件<bits/stdc++.h>
在使用GNU GCC Compiler的时候,你可以包含一个头文件<bits/stdc++.h>,便可以使用C++中的各种标准库,而不用一个一个包含进来. 这在acm比赛中是一种常用的做法 ...
- 为什么说”人生苦短,我用python“?
本文不扯什么大道理,只是先介绍Python的背景,然后从实用的角度出发举一两个真实栗子. 首先要想了解要一门语言的好坏,或者为什么招程序员喜欢(卧槽,原来程序员喜欢不是女朋友?)我们的先从语言的产 ...
- TIOBE 9 月排行榜:C++ 式微,第 3 名被 Python 拿下
TIOBE 发布了 9 月份的编程语言排行榜,上个月 Python 与第 3 名擦肩而过,而指数稳步上升的它在本月终于打败 C++,成功探花. “人生苦短,我用 Python”,Python 的经 ...
- Flask上下文管理
一.一些python的知识 1.偏函数 def add(x, y, z): print(x + y + z) # 原本的写法:x,y,z可以传任意数字 add(1,2,3) # 如果我要实现一个功能, ...
- maven之jre默认配置
需要在用户或者全局settings.xml中做如下配置 例:用户配置: 添加代码: <profile> <id>jdk-1.8</id> <activatio ...
- Art of Android Develop. Activity的生命周期和启动模式。
1. onCreate() , onRestart(), onStart(), onResume(), onPause(), onStop(), onDestroy() 2.
- Mysql binlog 安全删除(转载)
简介: 如果你的 Mysql 搭建了主从同步 , 或者数据库开启了 log-bin 日志 , 那么随着时间的推移 , 你的数据库 data 目录下会产生大量的日志文件 shell > ll /u ...
- 20165324 Java实验五 网络编程与安全
20165324 Java实验五 网络编程与安全 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:何春江 学号:20165324 指导教师:娄嘉鹏 实验日期:2018年5月28日 实 ...
- python3 对excel读、写、修改的操作
一.对excel的写操作实例: 将一个列表的数据写入excel, 第一行是标题,下面行数具体的数据 import xlwt #只能写不能读 stus = [['姓名', '年龄', '性别', '分数 ...
- python全栈开发从入门到放弃之递归函数的调用
1.递归效率低,需要在进入下一次递归时保留当前的状态,见51cto博客 解决方法是尾递归,即在函数的最后一步(而非最后一行)调用自动但是python又没有尾递归,且对递归层级做了限制 必须有一个明确的 ...