《Ext JS权威指南》——2.4节关于Ext.onReady

2.4 关于Ext.onReady
代码为什么写在Ext.onReady中,而不是在body中添加一个onload事件并在onload事件中运行呢?主要原因是Ext.onReady在DOM模型加载完毕后即可进行操作,而无需像onload事件那样,等待页面的所有资源都加载完毕后才进行操作,尤其是在页面有大图片这类资源的时候。下面我们来看看Ext.onReady是如何做到这点的。
在Loader.js文件可以找到Ext.onReady的定义:

Ext.onReady = function(fn, scope, options) {Loader.onReady(fn, scope, true, options);
};
在这里调用了Loader对象的onReady方法,在Loader.js中可找到如下定义:
onReady: function(fn, scope, withDomReady, options) {var oldFn;if (withDomReady !== false && Ext.onDocumentReady) {oldFn = fn;fn = function() {Ext.onDocumentReady(oldFn, scope, options);};}fn.call(scope);
},

在上面的代码中,因为调用时withDomReady为true,所以只需判断Ext.onDocumentReady是否存在,如果存在,就建立一个匿名函数fn,准备执行Ext.onDocumentReady方法。最后是调用函数fn,执行Ext.onDocumentReady。
在EventManger.js中可找到Ext.onDocumentReady的定义:

onDocumentReady: function(fn, scope, options){options = options || {};var me = Ext.EventManager,readyEvent = me.readyEvent;options.single = true;readyEvent.addListener(fn, scope, options);if (Ext.isReady) {readyEvent.fire();} else if (document.readyState == 'complete') {me.fireDocReady();} else {me.bindReadyEvent();}
},

在上面的代码中,readyEvent是Ext.util.Event的实例,options.single的作用是规定ready-Event事件只执行一次。接着将函数添加到Event实例内的监听事件列表中,最后判断DOM模型是否已加载完成。如果已加载完成,则调用fire方法依次执行监听事件列表中的函数。这样做的目的是:当存在多个onReady方法时,能保证所有的函数都能执行。如果还没有加载完成,而document对象的readyState属性为“complete”,表示文档其实已经加载完成了,但是没有设置isReady属性为true,那么可调用fireDocReady方法,其代码如下:

fireDocReady: function(){var me = Ext.EventManager;if (!Ext.isReady) {Ext.isReady = true;if (document.addEventListener) {document.removeEventListener('DOMContentLoaded', me.fireDocReady, false);window.removeEventListener('load', me.fireDocReady, false);} else {if (me.readyTimeout !== null) {clearTimeout(me.readyTimeout);}if (me.hasOnReadyStateChange) {document.detachEvent('onreadystatechange', me.checkReadyState);}window.detachEvent('onload', me.fireDocReady);}Ext.supports.init();me.onWindowUnload();me.readyEvent.fire();}
},

在上面的代码中,如果isReady不是true,则将其设置为true,然后移除文档的监听事件。首先调用Ext.supports的init方法检测当前运行环境的信息;然后调用onWindowUnload方法为文档绑定unload事件,触发后会删除页面的所有元素;最后再调用readyEvent的fire方法,开始执行我们定义的代码。
如果文档还没有加载完成,则执行bindReadyEvent方法,其代码如下:

bindReadyEvent: function(){var me = Ext.EventManager;if (me.hasBoundOnReady) {return;}if (document.addEventListener) {document.addEventListener('DOMContentLoaded', me.fireDocReady, false);window.addEventListener('load', me.fireDocReady, false);} else {if (!me.checkReadyState()) {document.attachEvent('onreadystatechange', me.checkReadyState);me.hasOnReadyStateChange = true;}window.attachEvent('onload', me.fireDocReady, false);}me.hasBoundOnReady = true;
},

看懂以上代码就应该很清楚整个执行过程了。在代码中,如果没有在页面中绑定监听事件,则绑定事件,非IE浏览器是绑定“DOMContentLoaded”事件,IE是绑定onload事件。对于旧版本的IE,会调用checkReadyState方法检查页面是否准备好,因为旧版本IE只能使用替代办法检查DOMContentLoaded事件。事件触发后执行fireDocReady方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455526.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git push 提交时显示 Empty reply from server的解决办法

输入 git fetch origin --prune 参考链接:https://stackoverflow.com/questions/28364023/gits-error-on-push-empty-reply-from-server 转载于:https://www.cnblogs.com/team42/p/6941678.html

转]移动视频监控(1)---项目综述

对于市场上的视频监控系统,大家都有一定的了解,就是视频采集,经过无线/有线发送到服务或代理,客户从服务或代理上得到视频/音频流。不复杂。 对于不远的将来,3G,4G的到来,对移动的业务有一个推动…

java 空接口_学Java,java接口搞明白了吗?大牛让你一文搞清楚

前言对于面向对象编程来说,抽象是一个极具魅力的特征。如果一个程序员的抽象思维很差,那他在编程中就会遇到很多困难,无法把业务变成具体的代码。在 Java 中,可以通过两种形式来达到抽象的目的,一种是抽象类&#xff0…

Check Point CEO:“我们正在积极寻找收购目标”

Check Point Sofrware Technologies很可能成为下一个会产生收购案的主流安全厂商,首席执行官Gil Shwed在该公司第二季度财报电话会议上这样表示。 “我们正在积极地寻求收购目标,期待无论是大规模的还是小规模的扩张,”Shwed表示。“我们在并…

Spark SQL 编程API入门系列之SparkSQL数据源

不多说,直接上干货! SparkSQL数据源:从各种数据源创建DataFrame 因为 spark sql,dataframe,datasets 都是共用 spark sql 这个库的,三者共享同样的代码优化,生成以及执行流程,所以 s…

H.264中的一些易混淆概念

Q:PSNR 峰值信噪比 Q:是根据它来取qp是不是? A:不是, 和QP没有直接关系, 但是QP的选择会影响到PSNR Q: 如果不用率失真最优化, 为什么选择SATD+deltar(mv,mode)作为模式选择的依据?为什么运…

Java中final关键字的几种用法

在java的关键字中,static和final是两个我们必须掌握的关键字。不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构。下面我们来了解一下final关键字及其用法。 final关键…

python pyqt5安装_Python3 安装PyQt5及exe打包图文教程

环境: Python 3.6.4 Pycharm Professional 2017.3.3 PyQt5 PyQt5-tools① Python 3 安装Python 3.x 安装时,默认勾选ADD Python 3.6 to PATH和ADD Python to environment variables的情况下,系统会向path中增加以下两个环境变量。D:\Program Files\Py…

《企业软件交付:敏捷与高效管理精要》——3.4 企业软件交付的软件工厂方法...

3.4 企业软件交付的软件工厂方法 正如我们前面讨论的,今天的机构面对的商业环境正以前所未有的速度发生变化。与此同时,这些机构还要管理和降低整个机构的运营成本。这就直接意味着,他们不仅要最大限度地减少浪费和低效率,还要提…

201706问题记录

1.四周阴影 box-shadow:0px 0px 10px #f5f5f5; 2. 原生setattribute()方法 jquery的attr()$(.fd-sq-zk).attr("title","收起"); 3.在iframe中获取外层容器的元素 属性等 $(parent.document).find("html")..... 4.监听页面变大变小事件 /…

一致性hash算法_(图文案例)一致性哈希算法详解 一点课堂(多岸教育)

一致性Hash算法关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中”一致性Hash算法”部分,对于为什么要使用一致性Hash算法、一致性Hash算法的算法原理做了详细的解读。算法的具体原理这里再次贴上:…

《HTML5 Canvas游戏开发实战》——2.1 绘制基本图形

本节书摘来自华章计算机《HTML5 Canvas游戏开发实战》一书中的第2章,第2.1节,作者:张路斌著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 2.1 绘制基本图形 所谓基本图形,就是指线、矩形、圆等最简单的图形&#x…

如何查看Ubuntu版本

有时候需要查看一下系统安装的Ubuntu的版本,最简单的方式是输入lsb_release -a。whatis lsb_release输出:print distribution-specific information。所以lsb_release这个命令就是用来输出发行版的信息的。 Open the Terminal enter:lsb_release -a It w…

linux下.a/.so/.la目标库区别

在linux平台上编译时,常会遇到目标库的疑问,有静态库也有动态库,单个理解都不太难,但是对复杂的工程而言,一旦混合到一起去,对整个工程的理解和调用,将会造成很大困扰,本文就汇总这几…

python 二元函数绘制_Python绘制二元函数曲面

微实践:绘制二元函数曲面我们将演示如何借助于ufunc的广播运算计算下述二元函数的在一个xy平面上的值并将其绘制成3D曲面。其中,x和y的取值范围均为[-2,2]。为了达到目的,我们需要一个二维的结果数组z,其元素的下标对应参数x,y的取…

Npgsql使用入门(三)【批量导入数据】

Program.cs代码: class Program{static void Main(string[] args){var test new PgBulkCopyHelper<SingleBuilding>("bld_amap_gzmain");foreach (string pName in test.PropNames){Console.WriteLine("name: {0},\t\ttype: {1}", pName, test.Prop…

远程网络视频监视技术

目前要实现广域网视频监视&#xff0c;主要通过三种方式实现&#xff1a;1.硬盘录像机&#xff1b;2.网络视频服务器&#xff1b;3.网络摄像机。 硬盘录像机是一个以录像为主的设备&#xff0c;有的可以支持IE浏览。网络视频服务器一般前端不录像&#xff0c;直接将影像传输到…

Deepin下java开发环境部署

简介 本经验由深度论坛用户(zhang12345shun)分享&#xff0c;原文地址 正文 SUN JDK&#xff08;现已改名Oracle JDK&#xff09; 1.下载Sun版JDK压缩包&#xff08;.tar.gz&#xff09;&#xff0c;选择其中的32/64位Linux版本。 2.将其解压缩&#xff1a; sudo tar -zx…

判断ic卡类型

传15读卡片数据 判断data8的status是否为0&#xff0c;是则是ic 否则就是磁条卡 根据二磁道数据识别是IC卡还是磁条卡 根据二磁道符号后面第一位识别。规则是 该数字 6 或者 2 则该卡是IC卡&#xff0c;否则是普通磁条卡 转载于:https://www.cnblogs.com/wubenhui/p/6956256.h…

python常用代码_Python常用算法学习(3)(原理+代码)——最全总结

1&#xff0c;什么是算法的时间和空间复杂度算法(Algorithm)是指用来操作数据&#xff0c;解决程序问题的一组方法&#xff0c;对于同一个问题&#xff0c;使用不同的算法&#xff0c;也许最终得到的结果是一样的&#xff0c;但是在过程中消耗的资源和时间却会有很大的区别。那…