`
yiminghe
  • 浏览: 1460691 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

简析 Ext.onReady

阅读更多

Ext.onReady 这个函数我想是最常用的函数了吧,毕竟没有 ready 前什么也不可以做的。
onReady的参数是一个函数 。
其实真正的调用是

 

Ext.onReady = Ext.EventManager.onDocumentReady;

 
而 Ext.EventManager 则是一个管理事件的对象,而且是单例的,为啥不做成静态呢,应该是为了不暴露里面的 private 函数喽,这也是对 传统语言private函数的一个实现

 

Ext.EventManager = funtion() {

	//private or privileged
	function xx(){
	
	};

  var pub ={

	//可以调用xx
	
	};

	//.....

	return pub;
}();
   


而 onDocumentReady 则是将他的参数加入到一个自定义事件的 listener 列表中去了,关于自定义事件以及事件监听器如何排队,如何触发监听器暂时不分析了。可这个 event 怎么来的呢,正是在 onDocumentReady 初始的

 

onDocumentReady:function(f){
	//页面加载好就直接触犯事件处理函数返回
	//..
	
	//页面没有加载好且自定义事件没有初始化,就初始化自定义事件
	if(!docReadyEvent){
	   initDocReady();
	}
	
	
	//自定义事件有了,把事件处理函数添加到自定义事件的 listeners 列表,等待事件触发后批处理
}

 
在初始这个事件过程中,终于看到了我们熟悉的 onload

 

var initDocReady = function(){
        
        //自定义事件,建立监听器队列
        docReadyEvent = new Ext.util.Event();
        
        
        //gecko内核,和opera利用那个DOMContentLoaded事件
        if(Ext.isGecko || Ext.isOpera) {
            document.addEventListener("DOMContentLoaded", fireDocReady, false);
        }
        
        //ie利用script的defer属性
        else if(Ext.isIE){
            document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");
            var defer = document.getElementById("ie-deferred-loader");
            defer.onreadystatechange = function(){
                if(this.readyState == "complete"){
                    fireDocReady();
                }
            };
        }
        
        //safari没有办法?只能定时判断document,dom树的状态
        else if(Ext.isSafari){
            docReadyProcId = setInterval(function(){
                var rs = document.readyState;
                if(rs == "complete") {
                    fireDocReady();
                 }
            }, 10);
        }
        
        //最坏情况,新浏览器??load 比上述事件先触发??
        //fireDocReady 会判断如果已经触发过一次就不再处理了。
        // no matter what, make sure it fires on load
        E.on(window, "load", fireDocReady);
    };
 


这样的话就实现了多个操作附加到了ext ready上面. ( 09年再读:ie 利用script defer属性 ,firefox监控domready事件,dom树加载完毕比window load事件要早得多,image标签加载需要时间的 )

 

 

    页面加载判断与onload 研究

 

     Defer And IE

 

      javascript : defer execution


这样ext 屏蔽了浏览器差异 ,关键是ext使用了它的通用事件模型,从而整合到了一个统一的框架中

分享到:
评论
5 楼 yiminghe 2009-08-22  
need_faith 写道
在用一个js文件中写了两个onReady(),每个onReady()中调用的方法不同,例如:
Ext.onReady(function(){
aaa();
});
Ext.onReady(function(){
bbb();
});
function aaa() {
.....
}
function bbb() {
.....
}
请问这样写,执行顺序是怎样的?



内部是一个队列,在前面的先执行 ,你这种情况就是 先 aaa(),再bbb()

一般一个ext.onready 就行了,为什么要两个。。。。。
4 楼 need_faith 2009-08-22  
在用一个js文件中写了两个onReady(),每个onReady()中调用的方法不同,例如:
Ext.onReady(function(){
aaa();
});
Ext.onReady(function(){
bbb();
});
function aaa() {
.....
}
function bbb() {
.....
}
请问这样写,执行顺序是怎样的?
3 楼 yiminghe 2008-10-08  
sp42 写道

如果脚本在前 标签在后, 脚本又要引用标签的话,不用onReady会出现错误的


谢谢 ,大侠 不吝时间 前来 指导 呵
2 楼 yiminghe 2008-10-08  
sp42 写道

如果脚本在前 标签在后, 脚本又要引用标签的话,不用onReady会出现错误的


我觉得 用 window.addListener('load',function(){xxxx})也行啊

不过好像 Ext.onready 比 load 响应跟快 ,可以不等 图片等资源 下载完 就执行 ,

利用了 onDocumentReady 好像  ,这个我没用过

以前 只用 onload ....土
1 楼 sp42 2008-10-07  
如果脚本在前 标签在后, 脚本又要引用标签的话,不用onReady会出现错误的

相关推荐

    ExtJS Ext.MessageBox.alert&#40;&#41;弹出对话框详解

    代码如下: Ext.onReady(function() { Ext.Msg.alert&#40;‘提示’, ‘逗号分隔参数列表’&#41;; //这种方式非常常见的 }); 效果图: 代码如下: Ext.onReady(function() { //定义 JSON(配置对象) var config = { ...

    Ext.Tree.Panel

    - `Ext.onReady`函数用于在DOM加载完成后执行代码,这里是创建`TreePanel`的合适时机。 - `Ext.BLANK_IMAGE_URL`通常用于设置占位符图片的URL,防止因图片未加载而出现的错误图标。 - `TreeLoader`对象用于从...

    3------通过实例学习------Ext.js------.docx

    在上述代码中,`Ext.onReady`确保在DOM加载完成后再执行JavaScript代码。`Ext.Msg.show`用于创建消息对话框,`Ext.get`则用于根据ID获取DOM元素。`Ext.fly`函数类似,但它的设计目的是快速执行一次性的DOM操作,而不...

    ext使用--Panel和iframe联合使用时页面高度的解决方法

    Ext.onReady(function() { var iframe = Ext.create('Ext.ux.IFrame', { src: 'http://example.com', plugins: ['miframe'] // 使用miframe插件 }); var panel = Ext.create('Ext.Panel', { items: [iframe]...

    Ext.ux.UploadDialog

    Ext.onReady(function() { var uploadDialog = new Ext.ux.UploadDialog({ title: '文件上传', url: '/server/upload.php', // 服务器端处理文件的URL width: 400, height: 300, listeners: { '...

    ext表格布局小例子

    接下来通过 `Ext.onReady` 函数确保 DOM 完全加载后执行代码。 ```javascript Ext.onReady(function() { //... }); ``` #### 三、数据模型与列模型配置 **数据模型** (`Store`) 负责数据的存储与管理,这里使用了...

    兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现

    它模仿了Ext.js库中的`Ext.onReady`功能,确保在页面DOM完全加载后执行指定的函数,即`GOOGLEResize`。 1. **IE的检测与处理**: 在IE浏览器中,代码通过检查`navigator.userAgent`来识别版本,并利用`...

    ext培训第二讲.doc

    **总结**:本节通过具体的步骤和示例,详细介绍了如何在EXT中创建一个简单的Hello World程序,并对`Ext.onReady`方法进行了深入解析。这不仅有助于理解EXT的基本使用方式,也为后续更复杂的应用打下了坚实的基础。

    Ext.MessageBox工具类简介

    案例如下: 代码如下: Ext.onReady(function(){ Ext.MessageBox.alert&#40;“提示”,”请单击我,确定”,callBack&#41;; function callBack(id){ alert&#40;“单击的按钮ID是:”+id&#41;; } Ext.MessageBox....

    简单介绍Ext 2.0

    上面的代码展示了如何使用`Ext.onReady()`来弹出一个警告框,告知用户Ext已经配置成功。 #### 五、Ext.Element对象:Ext的核心 `Ext.Element`是Ext 2.0的核心功能之一,提供了对DOM元素的强大操作能力。通过`Ext....

    Ext JS下载及配置

    3. **初始化应用**: 使用 `Ext.onReady` 函数来确保 DOM 加载完成后再执行 JavaScript 代码。例如: ```html Ext.onReady(function() { Ext.MessageBox.alert("Hello World", "Hello World!"); }); ``` ###...

    ext教程1.pdf

    EXTJS 应用程序的启动通常从`Ext.onReady` 函数开始。这个函数会在DOM加载完成后执行,确保在操作DOM元素时页面已经完全准备就绪。例如,我们可以使用如下方式在页面加载完毕后弹出提示框: ```javascript Ext....

    yui的扩展ext.rar

    - 初始化应用:使用Ext.onReady或Ext.application启动应用。 5. EXT的响应式设计 EXT还支持响应式布局,可以根据不同设备和屏幕尺寸自动调整界面,适应移动设备和平板电脑,实现跨平台的Web应用开发。 6. 扩展与...

    Ext原理.txt

    Ext.onReady(function(){ Ext.get('messageBox1').on('click', function(){ Ext.MessageBox.alert('状态', '成功'); }); }); ``` ##### 2. Ext.MessageBox.confirm() `Ext.MessageBox.confirm()` 方法用于...

    Ext中以get开头的方法使用

    Ext.onReady(function(){ var e = new Ext.Element("hello"); alert(Ext.get("hello")); // 使用ID获取 alert(Ext.get(document.getElementById("hello"))); // 使用DOM对象获取 alert(Ext.get(e)); // 使用...

    Ext Js权威指南(.zip.001

    2.4 关于ext.onready / 38 2.5 关于ext.blank_image_url / 40 2.6 关于字体 / 42 2.7 ext js 4语法 / 42 2.8 本地化 / 60 2.9 为本书示例准备一个模板 / 60 2.10 本章小结 / 61 第3章 调试工具及技巧 / 62 ...

Global site tag (gtag.js) - Google Analytics