《Ext JS实战》——1.3 框架概览

简介: Web远程调用是一种让JavaScript可以(远程地)执行服务器端定义的方法的一种手段,也叫做远程过程调用或者RPC。对于那些希望把服务器端的方法暴露给客户端,又不想被烦人的Ajax方法管理所困扰的开发环境来说,Web远程调用是很方便的。

本节书摘来自异步社区《Ext JS实战》一书中的第1章,第1.3节,作者:【美】Jesus Garcia著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.3 框架概览

Ext JS作为一个框架,不仅提供了UI部件,还提供了许多其他特性。这些内容可以分成6大部分,即Ext JS核心、UI组件、Web远程调用、数据服务、拖放以及通用工具。图1-4说明了这6个部分。

screenshot

图1-4 Ext JS的6大部分,即Ext JS核心、UI组件、Web远程调用、数据服务、拖放及通用工具

了解这6大部分之间的区别以及各自的用途,有助于开发应用程序时划分边界,因此下面先讨论这6个部分。

Ext JS核心
第一个功能集就是Ext JS核心,这一部分包括了许多基本功能,包括Ajax通信、DOM操作和事件管理等基础功能。框架里的其他东西都依赖于这个核心,反之不然,也就是核心并不依赖于其他东西。

更进一步了解Ext JS核心
Ext JS核心是一个函数库,属于Ext JS基础功能的一部分,可以看成与jQuery、Prototype和Scriptaculous等价。
UI组件
UI组件包括所有可以与用户进行交互的部件。

Web远程调用
Web远程调用是一种让JavaScript可以(远程地)执行服务器端定义的方法的一种手段,也叫做远程过程调用或者RPC。对于那些希望把服务器端的方法暴露给客户端,又不想被烦人的Ajax方法管理所困扰的开发环境来说,Web远程调用是很方便的。

进一步了解Ext JS Direct
因为Direct是一个聚焦于服务器端的产品,本书中不会涉及相关内容。Ext JS有许多在线资源可以学习Direct,包括许多流行的服务器端解决方案的示例。
数据服务部分关注的是数据需求,包括对数据的提取、解析以及把信息加载到数据存储器(store)。利用Ext JS的数据服务类,可以读取数组、XML以及JSON(JavaScript Serialized Object Notation,这种数据格式很快就会成为客户-服务端之间的通信标准)。而给UI组件提供数据的是数据存储器。

拖放
拖放很像是Ext JS内的一个迷你框架,可以对页面上的Ext JS组件或者任意HTML元素进行拖放操作。它包含了支持完整的拖放操作需要的所有必需元素。拖放本身是一个很复杂的主题,本书会在第13章和第14章完整地讨论这个主题。

工具
工具部分包含一些很酷的工具类,它能帮助开发人员更容易地处理一些常见任务。Ext.util.Format就是这样的一个例子,这个类让开发人员可以容易地对数据进行格式化或者转换。另外一个优雅的工具是CSS单体,可以用这个工具创建、更新、交换以及删除样式表,同时要求浏览器更新其缓存。

现在,已经对框架的主要功能划分有了大概的理解,接下来介绍一些Ext JS所提供的常用UI部件。

1.3.1 容器和布局一览
尽管在第3章还会更详细地探讨这个主题,现在也应该花点时间了解容器和布局,容器和布局这两个术语会在这本书中大量出现,因此在继续深入之前应该对它们有些最基本的了解。之后,我们再继续探讨UI函数库中那些可见的部件。

容器
容器本身也是一个部件,不过它是可以管理一个或者多个子元素的部件。而子元素就是被容器或者父元素所管理的任何一个部件或者组件,这就形成了父子关系。在API部分已经见到实际例子了。TabPanel本身就是一个容器,它管理着一个或者多个子元素,这些子元素可以通过选项卡访问。务必记住容器这个术语,等到更进一步学习如何使用框架中的UI单元时,会经常用到这个术语。

布局
容器是通过布局完成对容器所包含的子元素的可视化摆放的。Ext JS中有12种布局可供选择,第5章将更加详细地讨论这些布局,并分别演示每一种布局。现在已经对容器和布局有了一个宏观的理解,现在来看一些实际的容器。

在图1-5中,看到的是Container的两个子类——Panel和Window,每一个都有父子关系。

screenshot

图1-5 这里有两个父容器,Panel(左边)和Window(右边),管理子元素,嵌套子元素

图1-5中的Panel(左边)和Window(右边)每个都有两个子元素。每个父容器的Child Panel 1包含的都是HTML内容,而Child Panel 2用的都是简单的ContainerLayout布局,它们又管理着一个子Panel。ContainerLayout布局是其他所有布局的基础类。这个父子关系就是Ext JS中所有UI管理的关键,本书会反复强化和使用这个关系。

现在知道容器是管理子元素的,使用布局进行可视化的摆放。现在已经掌握了这些重要的概念了,继续讨论其他的实际容器。

1.3.2 实际应用中的其他容器
在学习容器时,已经看过了Panel和Window。图1-6显示了其他一些常用的Container的子类。

screenshot

图1-6 Container常用的子类——FormPanel、TabPanel、FieldSet、QuickTip以及使用的布局,我们会在第6章实现这个页面,到时就会用到表单

在图1-6中,可以看到FormPanel、TabPanel、FieldSet、QuickTip这些部件。FormPanel使用BaiscForm类对一个表单中的字段及其他子元素进行了封装。

如果从父子的角度来看,FormPanel管理了3个子元素:两个FieldSet的实例和一个TabPanel的实例。

FieldSet一般用于在表单中显示字段,就像HTML中典型的Field标签一样。这两个FieldSet也都管理着子元素,即文本字段。TabPanel管理着3个直接的子元素(选项卡);第一个选项卡(电话号码)中也管理着许多子元素,这些都是文本字段。QuickTip是用于显示的,当鼠标悬停在某个元素上时可以显示出帮助文本,不过它并不属于任何一个Ext JS组件的孩子。

将在第6章花些时间来打造这个相对复杂的UI,那时读者会更进一步地学习FormPanel。现在,继续看看框架必须提供的展示数据的部件。

1.3.3 网格、DataView和ListView
现在已经知道了框架中的数据服务部分是负责数据的加载和解析工作的。对数据存储器来说,它的最大用户就是GridPanel和DataView了,以及DataView的子类ListView。图1-7所示为Ext JS的GridPanel在现实应用中的的一个截屏。

screenshot

图1-7 Ext JS SDK所提供的Buffered Grid示例中的GridPanel

GridPanel是Panel的一个子类,它把数据以表格的样式展现出来,但是它的功能又远远地超出了传统的表格,还可以排序,可以调整大小,可以移动列头,以及类似RowSelectionModel和CellSelectionModel的选择模式。完全可以按照自己的意愿定义它的外观和体验,它还可以和PagingToolbar一起使用,从而对大数据集可以通过分区并按页显示。GridPanel自己也有子类,例如EditorGridPanel,这个类所创建的数据表格是允许用户对表格中的数据进行编辑的,编辑时又可以利用Ext JS的任何一种数据输入部件。

用表格显示数据非常棒,不过如果每一行数据都包含很多的DOM元素,那么计算代价就过于昂贵了。想要解决这个问题,可以把GridPanel和PagingToolbar合起来一起使用,或者使用一个更轻量级的部件来显示数据,这些部件包括DataView以及它的子类,ListView,如图1-8所示。

DataView类从数据存储器(Store)中获取数据,然后再根据一个模板(Template)把这些数据绘制到屏幕上,同时它还提供一个简单的选择模型。Ext JS的模板其实就是一个DOM工具,可以创建一个模板,在里面放上代表数据元素的占位符,这些占位符最后会被来自于数据存储器中的记录填充,并充实DOM内容。在图1-8中,DataView(左侧)显示的就是来自于数据存储器中的数据,这些数据包含了对图片的引用。它所使用的是一个已经预先定义好的模板,这个模板中有图片标签,用每个记录来填充图片的区域。于是模板就对每一条记录都填充了一个图片标签,最后就是一个非常漂亮的照片拼图了。DataView可以用于显示数据存储器中的任何内容。
screenshot

图1-8 Ext JS SDK示例中的DataView(左)和ListView(右)

图1-8右侧所示的ListView也是用一种表格的样式来显示数据的,不过它是DataView的子类。如果不想用GridPanel的一些特性,例如排序、可调整的列,但是又想用表格化的形式展示数据,那么DataView确实是一个不错的选择,它可以避免GridPanel的笨重。

要在屏幕上展现数据,GridPanel和DataView绝对是最关键的工具,不过它们都有一个局限。它们所显示的都只能是列表形式的记录。它们都不能显示层次化的数据,而这正是TreePanel大展身手的地方。

1.3.4 模仿一个TreePanel和叶子
TreePanel这个部件可以说是所有使用数据的UI部件中的一个异类,因为它所使用的数据并不是来自于数据存储器的。相反,它使用的是借助data.Tree类实现的层次化的数据。图1-9所示为Ext JS的TreePanel部件的一个示例。

screenshot

图1-9中的TreePanel所显示的是安装目录的父子关系数据。TreePanel会利用TreeLoader通过Ajax远程获取数据,也可以通过配置使用浏览器端的数据。还可以通过配置支持拖放功能,而且它有自己的选择模型。

前面在讨论容器的时候,已经看到了用在表单中的TextField。接下来,我们来看看框架所提供的其他一些输入字段。

1.3.5 表单的输入字段
在Ext JS的调色板上一共有8个输入字段,从最简单的TextField(这个已经介绍过了)到ComboBox和HtmlEditor这类复杂的字段。图1-10所示为一些可用的Ext JS表单字段。

screenshot

有一些表单输入字段看起来就是对应的原始HTML字段的美化版本,如图1-10所示。不过二者的相似之处也就到此为止。Ext JS表单字段还另有一番风光!

每个Ext JS字段(除了HtmlEdirot)都自带了一套工具,可以进行类似get和set的操作、把字段置成无效状态、重置字段内容、对字段进行校验等一系列操作。也可以通过正则表达式或者自定义的校验方法进行自定义校验,这就可以对录入到表单的数据进行完整的控制了。而且可以在用户录入数据的同时就进行数据的校验,从而为用户提供实时的反馈信息。

TextField和TextArea
TextField和TextArea类可以看成是与之对应的普通的HTML字段的扩展。NumberField是TextField的一个子类,也是一个很好用的类,因为它通过正则表达式来保证用户只能输入数字。通过使用NumberField,可以配置小数的精度以及指定录入值的范围。与其他的字段相比,ComboBox和TimeField两个类需要更长的篇幅进行讲解,因此现在先暂时跳过这两个类,稍后再介绍它们。

Radio和Checkbox
与TextField类似,Radio和Checkbox这两个输入字段也是对旧版本的Radio和Checkbox的扩展,不过它拥有所有的Ext JS元素管理的全部优雅性,并且有方便的类创建自动布局管理的Checkbox和RadioGroup。图1-11所示的就是如何用复杂的布局对Ext JS的Checkbox和RadioGroup进行配置的简单例子。

screenshot

HtmlEditor
HTML编辑器是个WYSIWYG工具,它就像打了兴奋剂的TextArea一样。HtmlEdirtor利用的是当前浏览器的HTML编辑功能,可以把它看作是字段的一个异类。因为它天生的复杂性(使用了IFrame和其他东西),所以没有诸如校验等许多功能,也不能被标识成无效状态,关于这个字段还有更多的内容要讨论,这些讨论都留到第6章。不过现在,我们要再回到ComboBox和它的子类TimeField。

ComboBox和TimeField
ComboBox轻而易举地就成为最复杂的可配置的表单输入字段之首。它可以模拟传统的下拉选择框或者可以通过数据存储器使用远程的数据集。可以配置文本的自动补齐,也叫做输入探测,可以在用户输入时进行远程或者本地的数据过滤。也可以使用用户自己的模板,还可以自定义下拉区域中的列表,也叫做ListBox。图1-12所示为一个自定义的ComboBox的实际例子。

screenshot

在图1-12中使用了一个自定义的组合框来搜索Ext JS论坛。这个ComboBox用一个列表框显示帖子的标题、日期、作者以及内容片段等的内容。因为数据集范围太大,因此还配置了一个翻页工具栏,用户可以在结果数据中前后翻页。因为ComboBox是高度可配置的,还可以在结果数据集中加上图片,这样就可以更漂亮地展现结果了。

好了,这就是我们的UI之旅的最后一站了。现在会把其他的一些UI组件快速的浏览一遍。

1.3.6 其他部件
还有一批UI部件也很优秀,它们并不属于常用的组件,不过对于一个庞大的UI计划来说却起着重要的作用。如图1-13所示,我们来看看有哪些UI部件,以及它们有哪些功能。

工具条(Toolbar)
工具条本身也是一个部件,不过差不多可以把任何其他部件都塞进去。开发人员通常会把菜单和按钮放进去。在讨论自定义的ComboBox时,已经看过Toolbar的子类,即PagingToolBar。Panel以及差不多它的任何子类都可以把这些工具栏放在内容区域的顶部或者底部。Button部件是普通的HTML按钮的美化版本,可以带有图标和文本。

screenshot

菜单(Menu)
可以通过单击工具条上的一个按钮的方式显示菜单,或者根据需要在屏幕的任意X、Y坐标处显示菜单。典型的菜单包括的都是菜单项,例如上面显示的项目和带颜色的菜单条目,菜单项也可以包含像ComboBox这样的部件。

消息框(MessageBox)
MessageBox是一个工具类,有了这个类以后,就可以很容易地给用户提供反馈信息,而无须再使用一个Ext.Window的实例了。图1-13所示的实例中,消息框中用一个动态的ProgressBar向用户显示加载的进度。

滑动条(Slider)
Slider是一个通过拖拉手柄来改变值的部件。可以用图片和CSS对滑动条进行美化,并对它的外观进行定制。可以限制滑动条的手柄只能以递增的方向移动。在这个例子中,滑动条的手柄上带了一个ToolTip,它可以在用户移动柄时显示滑动的值。除了缺省的水平方向,滑动条也可以配置成垂直的。

现在,我们知道Ext JS是如何通过一大堆的部件帮助我们完成任务了。我们可以推荐大家都使用Ext JS来开发应用程序,无须接触哪怕少量的HTML,或者也可以把它集成到已有的站点中。现在我们对整个框架有了一个自顶向下的考察,包括UI之旅。不过目前我们所讨论的这些内容是自从Ext JS 2.0以来就有的。接下来讨论Ext JS 3.0中有哪些新东西。

相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
阿里云实时数仓实战 - 用户行为数仓搭建
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3 )前置知识要求:熟练掌握 SQL 语法熟悉 Linux 命令,对 Hadoop 大数据体系有一定的了解   课程大纲 第一章 了解数据仓库概念 初步了解数据仓库是干什么的 第二章 按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章 数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章 采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
相关文章
|
6月前
|
人工智能 自然语言处理 JavaScript
通义灵码2.5实战评测:Vue.js贪吃蛇游戏一键生成
通义灵码基于自然语言需求,快速生成完整Vue组件。例如,用Vue 2和JavaScript实现贪吃蛇游戏:包含键盘控制、得分系统、游戏结束判定与Canvas动态渲染。AI生成的代码符合规范,支持响应式数据与事件监听,还能进阶优化(如增加启停按钮、速度随分数提升)。传统需1小时的工作量,使用通义灵码仅10分钟完成,大幅提升开发效率。操作简单:安装插件、输入需求、运行项目即可实现功能。
331 4
 通义灵码2.5实战评测:Vue.js贪吃蛇游戏一键生成
|
2月前
|
JavaScript 前端开发 安全
【逆向】Python 调用 JS 代码实战:使用 pyexecjs 与 Node.js 无缝衔接
本文介绍了如何使用 Python 的轻量级库 `pyexecjs` 调用 JavaScript 代码,并结合 Node.js 实现完整的执行流程。内容涵盖环境搭建、基本使用、常见问题解决方案及爬虫逆向分析中的实战技巧,帮助开发者在 Python 中高效处理 JS 逻辑。
|
4月前
|
JavaScript 前端开发 算法
流量分发代码实战|学会用JS控制用户访问路径
流量分发工具(Traffic Distributor),又称跳转器或负载均衡器,可通过JavaScript按预设规则将用户随机引导至不同网站,适用于SEO优化、广告投放、A/B测试等场景。本文分享一段不到百行的JS代码,实现智能、隐蔽的流量控制,并附完整示例与算法解析。
126 1
|
7月前
|
JavaScript 前端开发 API
|
8月前
|
监控 JavaScript 前端开发
MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver:原理与实战案例
MutationObserver 是一个非常强大的 API,提供了一种高效、灵活的方式来监听和响应 DOM 变化。它解决了传统 DOM 事件监听器的诸多局限性,通过异步、批量的方式处理 DOM 变化,大大提高了性能和效率。在实际开发中,合理使用 MutationObserver 可以帮助我们更好地控制 DOM 操作,提高代码的健壮性和可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver:原理与实战案例
|
11月前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
2744 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
监控 安全 中间件
Next.js 实战 (十):中间件的魅力,打造更快更安全的应用
这篇文章介绍了什么是Next.js中的中间件以及其应用场景。中间件可以用于处理每个传入请求,比如实现日志记录、身份验证、重定向、CORS配置等功能。文章还提供了一个身份验证中间件的示例代码,以及如何使用限流中间件来限制同一IP地址的请求次数。中间件相当于一个构建模块,能够简化HTTP请求的预处理和后处理,提高代码的可维护性,有助于创建快速、安全和用户友好的Web体验。
237 0
Next.js 实战 (十):中间件的魅力,打造更快更安全的应用
|
中间件 API
Next.js 实战 (八):使用 Lodash 打包构建产生的“坑”?
这篇文章介绍了作者在使用Nextjs15进行项目开发时遇到的部署问题。在部署过程中,作者遇到了打包构建时的一系列报错,报错内容涉及动态代码评估在Edge运行时不被允许等问题。经过一天的尝试和调整,作者最终删除了lodash-es库,并将radash的部分源码复制到本地,解决了打包报错的问题。文章最后提供了项目的线上预览地址,并欢迎读者留言讨论更好的解决方案。
262 0
Next.js 实战 (八):使用 Lodash 打包构建产生的“坑”?
|
设计模式 数据安全/隐私保护
Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式
这篇文章介绍了在Next.js框架下,如何处理中后台管理系统中特殊页面(如登录页)不包裹根布局(RootLayout)的问题。作者指出Next.js的设计理念是通过布局的嵌套来创建复杂的页面结构,这虽然保持了代码的整洁和可维护性,但对于特殊页面来说,却造成了不必要的布局包裹。文章提出了一个解决方案,即通过判断页面的skipGlobalLayout属性来决定是否包含RootLayout,从而实现特殊页面不包裹根布局的目标。
338 0
Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式
|
JavaScript 前端开发 API
Next.js 实战 (六):如何实现文件本地上传
这篇文章介绍了在Next.js中如何实现文件上传到本地的方法。文章首先提到Next.js官方文档中没有提供文件上传的实例代码,因此开发者需要自行实现,通常有两种思路:使用Node.js原生上传或使用第三方插件如multer。接着,文章选择了使用Node.js原生上传的方式来讲解实现过程,包括如何通过哈希值命名文件、上传到指定目录以及如何分类文件夹。然后,文章展示了具体的实现步骤,包括编写代码来处理文件上传,并给出了代码示例。最后,文章通过一个效果演示说明了如何通过postman模拟上传文件,并展示了上传后的文件夹结构。
292 0
Next.js 实战 (六):如何实现文件本地上传