《Ext JS实战》——第2章 基础回顾 2.1 正确的开始

第2章 基础回顾

在编写程序时,我经常形象思维,这会有助于在头脑中形成与概念对应的等价物。例如,我喜欢把启动一个应用程序想象成航天飞机的发射,因为二者都可能成功或者无法挽回地失败。要想操作DOM,最重要的一点是要知道应该在什么时候启动JavaScript代码。在这一章里,会学习如何用Ext运行JavaScript代码,而且还得保证这些代码在每个浏览器上都能在最恰当的时机初始化。然后再讨论如何通过Ext.Element操作DOM。

你肯定也知道,对DOM的操作是程序员花费时间最多的编码任务。不管是增加一个元素或者是删除一个元素,如果你以前曾用过JavaScript的内置方法来完成这些任务的经历,一定会觉得痛苦不堪。毕竟,截止到目前为止,DHTML作为动态Web页面的核心已经存在很长时间了。

我们还会看到Ext的核心,一个名为Ext.Element的类,这是一个强健的跨浏览器的DOM元素管理工具包。你将学到如何用Ext.Element在DOM中增加或者移除节点,并且还会看到它让这个工作变得多么轻松。

熟悉了Ext.Element类之后,接着就要学习如何通过模板把HTML内容加到DOM中去,我们要深入了解XTemplate的用法,这个类继承自Template,而且你将会学到如何通过它轻松地遍历数据,并能够注入行为调整的逻辑。这会是很有趣的一章。不过,在开始输入代码之前,首先必须要知道的是启动代码的正确方法。

2.1 正确的开始

早前的时候,大多数开发人员所采用的初始化JavaScript的方法是在被加载的HTML页面的< body>标签加上一个onLoad属性:

用这种方法触发JavaScript的确有效,不过对于那些使用了Ajax的Web 2.0站点或者应用程序来说,这并不是一个理想的方法。因为对于不同的浏览器而言,onLoad代码被触发的时间并不完全相同。例如,有的浏览器是在DOM已经准备就绪,而且所有的内容都已经加载完毕、浏览器也已经渲染完毕之后才触发。对于Web 2.0来说,这可不是什么好事,因为一般都希望能在DOM准备就绪之后,但是加载任何图片之前启动代码,从而管理和操作DOM元素。这就需要在时机和结果之间找到最好的平衡点,我喜欢把这个时间点叫做页面加载周期中的“最佳时点”。

在浏览器的世界中,每种浏览器都有它自己的方式判断什么时候DOM节点可以操作。

2.1.1 准备好了再行动
每个浏览器都有自己的原生方案用来检测DOM就绪,不过在不同浏览器间这些方案并不统一。例如,Firefox和Opera会触发DOMContentLoaded事件。IE要求在文档中放一个带defer属性的脚本标签,一旦DOM就绪就会触发它。WebKit不会触发任何事件,不过会把document.readyState属性置成complete,因此必须通过一个循环不断地检查这个属性,然后再触发一个客户事件通知代码DOM已经就绪了。真够乱的吧!

2.1.2 由Ext JS来触发
幸运的是,现在有了Ext.onReady,它解决了这个时机问题,可以用作应用代码的启动基点。Ext JS通过检测代码在哪种浏览器执行,并管理对DOM就绪状态的检测,从而实现了跨浏览器的兼容性,保证了在正确的时间执行代码。

Ext.onReady其实是对Ext.EventManager.onDocumentReady的引用,它接收3个参数:要调用的方法、调用该方法的作用域以及传给该方法的选项。如果初始化方法需要在一个特定的作用域中执行,那么第二个参数,即作用域参数,就会被使用。

获取作用域的处理方法
作用域是许多JavaScript开发人员在他们的职业生涯早期一直纠结的概念。我认为它是每个JavaScript开发人员都要掌握的一个概念。
自己写的那些基于Ext的JavaScript代码可以放在引入Ext JS脚本之后的任何地方。这一点很重要,因为JavaScript文件的请求和加载是同步进行的。如果命名空间中还没有Ext的定义时就调用Ext的方法会导致异常,同时代码也就无法启动。下面就是一个简单的例子,这个例子通过Ext.onReady触发一个Ext的MessgeBox警告窗口:

在这个例子中,把一个所谓的匿名函数作为唯一的参数传给Ext.onReady,一旦DOM就绪,这个匿名函数就会被执行。这里的匿名函数只包含了一行代码,即调用Ext.MessageBox,如图2-1所示。

匿名函数就是没有被任何变量或者任何对象中的键引用的函数。Ext.onReady登记了我们提供的匿名函数,当内部的docReadyEvent事件被触发时,就会执行这个函数。简单地说,事件很像是说明已经发生了什么事情的消息。而监听器是一个被注册的方法,当有事件发生时,这个方法就会被执行,也可以说是被调用。

当Ext的页面加载周期到达了执行我们提供的匿名函数和其他注册的监听器的精确时点(还记得之前提到的最佳时点吗)时,就会触发这个docReadyEvent事件。如果事件这个概念听起来很迷糊,不要担心。事件管理本身就是一个复杂的主题,我们会在第3章介绍。

Ext.onReady的重要性毋庸置疑。所有的示例代码(乃至最终应用程序代码)都必须用这种方法来启动。如果说这个例子中的Ext.onReady还不够详细,那就先记住必须用它来启动代码,而且必须要用下面这种方式来封装示例代码:

既然适应了通过Ext.onReady启动代码,就要花些时间探讨Ext.Element类,它是框架的核心。操作DOM是一个贯穿整个框架的关键主题。

时间: 2024-10-25 04:48:17

《Ext JS实战》——第2章 基础回顾 2.1 正确的开始的相关文章

《Ext JS实战》——导读

**前言**Ext(读作Eee-ecks-tee)JS 3.0是一个功能强大的UI框架,可以构造丰富.健壮的跨浏览器应用,它最初是由Jack Slocum在2006年开发出来的.从那时起,Ext JS就经历了一个爆炸性的增长,因为它满足了Web开发人员对于一个真正的.有完整的组件和事件模型的UI框架的需要.这也使得它在竞争激烈的Web 2.0库领域独树一帜. 本书会带你对框架进行深度探索,会通过大大小小的例子演示Ext JS的高效使用方法.而且本书还使用了许多手绘的插图帮你加快学习的速度. Ex

《Ext JS实战》——第1章 独特的框架 1.1 认识Ext JS

第一部分 Ext JS介绍 欢迎阅读<Ext JS实战>,本书是对Ext JS世界的深度之旅.在本书中,不仅要学习如何利用Ext JS框架完成各种任务,还会学习构成框架的各种组件和部件之间的差异. 通过第1章到第3章的学习,我们能够对框架的基础部分有必要的理解.我们的旅途从第1章正式起航,在第1章会学习框架的基础知识.第2章是"热身"章,会了解一些能让应用程序正确运行的关键要素.第3章会涉及框架的一些内部机制,例如组件模型和容器模型. 学完这一部分后,就可以探索Ext JS

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

1.3 框架概览 Ext JS作为一个框架,不仅提供了UI部件,还提供了许多其他特性.这些内容可以分成6大部分,即Ext JS核心.UI组件.Web远程调用.数据服务.拖放以及通用工具.图1-4说明了这6个部分. 图1-4 Ext JS的6大部分,即Ext JS核心.UI组件.Web远程调用.数据服务.拖放及通用工具 了解这6大部分之间的区别以及各自的用途,有助于开发应用程序时划分边界,因此下面先讨论这6个部分. Ext JS核心 第一个功能集就是Ext JS核心,这一部分包括了许多基本功能,包

《Ext JS实战》——1.7 小结

1.7 小结 通过这部分对于Ext JS的介绍,已经知道了如何用它构建健壮的Web应用程序,或者和现有的Web站点集成.也知道如何和市面上的其他流行框架相权衡,也知道它是唯一基于UI的框架,包含类似Component.Container.Layout以UI为中心的支持类.记住Ext JS可以放在jQuery.Prototype和YUI的上面. 本章对框架所提供的一些核心UI组件进行了一些探讨,并展示了这些内置的部件为快速应用开发带来效果.此外,还谈到了Ext JS 3.0引入的一些变化,例如Fl

《Ext JS实战》——2.2 Ext.Element类

2.2 Ext.Element类 所有使用了JavaScript的Web应用程序都会围绕着一个核心,也就是HTML的Element.JavaScript对DOM节点的访问能力让我们能够随意.灵活地操作DOM,包括增加.删除.美化或者修改文档中的任意节点内容.通过ID引用一个DOM节点的传统方法是: 这个getElementById方法很好用,可以执行一些类似改变innerHTML的内容,或者美化和配置一个CSS类这样的基本任务.不过要是想对该节点做更多的事情,例如管理它的事件,在有鼠标点击时应用

《Ext JS实战》——1.5 下载并配置

1.5 下载并配置 尽管下载Ext JS的过程简单,可配置一个使用Ext JS的页面却不像在HTML中引用一个文件那么简单.除了配置之外,还得了解目录的层级关系,要知道都有哪些目录以及它们的用途. 我们要做的第一件事就是得到源代码. 下载的SDK是个ZIP文件,差不多有6MB大小.后面会解释为什么这些文件会这么大.现在,把这个文件解压到一个用于专门保存JavaScript的地方.要使用Ajax,需要有一个Web服务器.我在自己的计算机上一般会配置一个本地的Apache,它是个免费的而且跨平台的W

《Ext JS实战》——1.2 需要知道的事项

1.2 需要知道的事项 并不是说必须先是一个Web应用开发专家,然后才能用Ext JS进行开发.但是对于开发人员而言,在使用这个框架开始编写代码之前还是有一些核心的内容需要知道. 第一个技能就是对HTML(超文本标记语言)和CSS(层叠样式表)要有最基本的了解.对这些技术有实际经验尤为重要,因为Ext JS和其他JavaScript UI函数库一样,也是用HTML和CSS来构建它的UI控件和小挂件的.尽管这些东西看起来很像典型的现代操作系统的控件,但最后它们都落到浏览器中的HTML和CSS. 因

《Ext JS实战》——1.4 Ext JS 3.0的新特性

1.4 Ext JS 3.0的新特性 Ext JS 2.0中引入的一些变化是颠覆性的,这就导致从级到2.0相当困难.这主要是因为这一版引入了一个更加现代的布局管理器以及一个崭新的.健壮的组件层次,许多Ext JS 1.x的代码都会因此而崩溃.值得庆幸的是,由于Ext JS 2.0的良好的工艺设计,从Ext JS 2.0到3.0的移植就非常容易了.尽管Ext JS 3.0新增的内容并不怎么神奇,不过最新的版本还是可圈可点的,有些新增的特性还是值得讨论的. 1.4.1 Ext JS通过Direct完

《Ext JS实战》——1.6 测试

1.6 测试 在这个练习中,要创建一个Ext JS的Window,然后通过Ajax请求一个HTML文件,并把文件的内容展现在Window的内容区域.现在从创建主HTML文件开始,然后是所有的JavaScript文件. 代码1-1 创建helloWorld.html 代码1-1是典型的只有Ext配置的HTML标记,包含了合并版的CSS文件,ext-all-css1和两个必须的JavaScript文件ext-base.js和ext-all-debug.js2.接着,又创建了一个JavaScript块