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前端框架解决了什么问题的更多相关文章

  1. ExtJS前端框架EXT弹出窗口事件

    https://blog.csdn.net/alsyuan/article/details/73240841 Ext.MessageBox.alert()Ext.MessageBox.alert()提 ...

  2. 发现 一个业务管理系统 解决了 orm 和 前端框架 剩下的 是 业务逻辑 了 。 哈

    解决了 orm 和 前端框架 剩下的 是 业务逻辑 了 . 哈 还有 各种 aop 组件 呢 . 大家 high 来 准备 用 fluent data  和 mysql 写一个 wcf 的 接口呢. ...

  3. 前端框架——BootStrap学习

    BootStrap简单总结下:1.栅格系统,能够很好的同时适应手机端和PC端(及传说中的响应式布局) 2.兼容性好 接下来是对BootStrap学习的一些基础案例总结和回顾: 首先引入:bootstr ...

  4. 前端框架 EasyUI (0) 重新温习(序言)

    几年前,参与过一个项目.那算是一个小型的信息管理系统,BS 结构的,前端用的是基于 jQuery 的 EasyUI 框架. 我进 Team 的时候,项目已经进入开发阶段半个多月了.听说整个项目的框架是 ...

  5. 10大H5前端框架

    作为一名做为在前端死缠烂打6年并且懒到不行的攻城士,这几年我还是阅过很多同门从知名到很知名的各种前端框架,本来想拿15-20个框架来分享一下,但在跟几个前辈讨教写文章的技巧时果断被无情的打击了,所以这 ...

  6. Web前端框架与类库的思考

    说起前端框架,我也是醉了.现在去面试或者和同行聊天,动不动就这个框架碉堡了,那个框架好犀利. 当然不是贬低框架,只是有一种杀鸡焉用牛刀的感觉.网站技术是为业务而存在的,除此毫无意义,框架也是一样.在技 ...

  7. React 还是 Vue: 你应该选择哪一个Web前端框架?

    学还是要学的,用的多了,也就有更多的认识了,开发中遇到选择的时候也就简单起来了. 本文作者也做了总结: 如果你喜欢用(或希望能够用)模板搭建应用,请使用Vue    如果你喜欢简单和“能用就行”的东西 ...

  8. Web前端框架汇总

    在做web开发的时候难免遇到一个问题,那就是,选择什么样的框架.下面把前端的框架简单的列一下. 1.flex Apache基金会今天发布了Flex 4.8版本,这是Adobe将Flex捐献给Apach ...

  9. 如何选择前端框架:ANGULAR VS EMBER VS REACT

    最近一段时间是令前端工程师们非常兴奋的时期,因为三大Web框架陆续发布新版本,让我们见识到了更强大的Web框架.Ember2.0在2个月之前已经发布,从1.0升级到2.0非常简单.几周之前React发 ...

随机推荐

  1. C++标准库头文件<bits/stdc++.h>

    在使用GNU GCC Compiler的时候,你可以包含一个头文件<bits/stdc++.h>,便可以使用C++中的各种标准库,而不用一个一个包含进来. 这在acm比赛中是一种常用的做法 ...

  2. 为什么说”人生苦短,我用python“?

    本文不扯什么大道理,只是先介绍Python的背景,然后从实用的角度出发举一两个真实栗子. ​ 首先要想了解要一门语言的好坏,或者为什么招程序员喜欢(卧槽,原来程序员喜欢不是女朋友?)我们的先从语言的产 ...

  3. TIOBE 9 月排行榜:C++ 式微,第 3 名被 Python 拿下

    TIOBE 发布了 9 月份的编程语言排行榜,上个月 Python 与第 3 名擦肩而过,而指数稳步上升的它在本月终于打败 C++,成功探花. ​ “人生苦短,我用 Python”,Python 的经 ...

  4. Flask上下文管理

    一.一些python的知识 1.偏函数 def add(x, y, z): print(x + y + z) # 原本的写法:x,y,z可以传任意数字 add(1,2,3) # 如果我要实现一个功能, ...

  5. maven之jre默认配置

    需要在用户或者全局settings.xml中做如下配置 例:用户配置: 添加代码: <profile> <id>jdk-1.8</id> <activatio ...

  6. Art of Android Develop. Activity的生命周期和启动模式。

    1.  onCreate() ,  onRestart(),  onStart(),  onResume(),  onPause(),  onStop(),  onDestroy() 2.

  7. Mysql binlog 安全删除(转载)

    简介: 如果你的 Mysql 搭建了主从同步 , 或者数据库开启了 log-bin 日志 , 那么随着时间的推移 , 你的数据库 data 目录下会产生大量的日志文件 shell > ll /u ...

  8. 20165324 Java实验五 网络编程与安全

    20165324 Java实验五 网络编程与安全 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:何春江 学号:20165324 指导教师:娄嘉鹏 实验日期:2018年5月28日 实 ...

  9. python3 对excel读、写、修改的操作

    一.对excel的写操作实例: 将一个列表的数据写入excel, 第一行是标题,下面行数具体的数据 import xlwt #只能写不能读 stus = [['姓名', '年龄', '性别', '分数 ...

  10. python全栈开发从入门到放弃之递归函数的调用

    1.递归效率低,需要在进入下一次递归时保留当前的状态,见51cto博客 解决方法是尾递归,即在函数的最后一步(而非最后一行)调用自动但是python又没有尾递归,且对递归层级做了限制 必须有一个明确的 ...