`
yiminghe
  • 浏览: 1434174 次
  • 性别: 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 = { ...

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

    其中对于IE的检测很有意思。 以上代码,整理自Extjs的脚本,完全可以代替 Ext.onReady使用。

    ext可编辑表格

    ext可编辑表格Ext.onReady(function() { Ext.QuickTips.init(); //格式化日期 function formatDate(value) { return value ? value.dateFormat('Y年m月d日') : ''; } // 别名 var fm = Ext.form; //...

    Ext.MessageBox工具类简介

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

    Extjs4.0一些常见入门学习范例带注释详解

    Ext.onReady(function() { /** * 1.创建一个window窗体 */ Ext.define('MyApp.MyWindow', { extend : 'Ext.Window', title : 'welcome!', initComponent : function() { this.items = [{ xtype : 'textfield', name ...

    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 ...

    ExtJSWeb应用程序开发指南(第2版)

    6.2.1 Ext.onReady() 6.2.2 Ext.get() 6.2.3 Ext.select() 6.2.4 Ext.query() 6.2.5 Ext.getCmp() 6.2.6 Ext.getDom() 6.2.7 Ext.isEmpty() 6.2.8 Ext.namespace() 6.2.9 Ext.each() ...

    Ext教程(最新extJs教程)限量版

    Ext.onReady(function(){ // shorthand var Tree = Ext.tree; var tree = new Tree.TreePanel({ el:'tree-div', useArrows:true, autoScroll:true, animate:true, enableDD:true, containerScroll: true,...

    doc格式 ext EXT 中文手册

    Ext.onReady 可能是你接触的第一个方法。这个方法是指当前 DOM 加载完毕后,保证页面内的所有 元素能被 Script 引用(reference)。你可删除 alert()那行,加入一些实际用途的代码试试: Ext.onReady(function() { ...

    Backbone.Events.onReady:Backbone.Events 的 onReady() 方法

    Backbone.Events.onReady 将onReady和triggerReady方法添加到Backbone.Events 。 行为: 准备好之前- 注册回调。 准备就绪时,运行所有挂起的回调,从triggerReady传入任何数据。 准备就绪后- 立即运行回调,传入...

    实现了DIV层的移动技术

    Ext.onReady(function(){ var win; var button = Ext.get('show-btn'); button.on('click', function(){ // create the window on the first click and reuse on subsequent clicks if(!win){ win = new Ext....

    Ext javascript建立超链接,进行事件处理的实现方法

    [removed] 2,应用到Ext中的树控件事件处理 tree_03.js 代码如下:Ext.onReady(function(){ var root = new Ext.tree.TreeNode({ //tree,这里没有function,使用json格式 id:1, text:”linjq” }); var c1 = new Ext....

    ext监听事件方法[初级篇]

    }Ext.onReady(function(){ Ext.get(“btnAlert”).addListener(“click”,a);//这里监听 //或者使用 Ext.get(“btnAlert”).on(“click”,a);//效果相同 });[removed] &lt;input id=”btnAlert” type=”button”...

    EXTJS创建提示框、面板、表格建议代码实现

    [removed] function testPanel(){ var p=new Ext.Panel({ title:'测试面板', collapsible:true, renderTo:'base',//被渲染的对象,渲染的对象必须是ID ... Ext.onReady(testPanel); [removed]

    AngularJS-Scope.onReady:AngularJS的辅助包装器,用于使控制器和指令与HTTP数据保持同步

    AngularJS-Scope.onReady 这是一个帮助文件,用于为angularJS应用程序中的$ scope.onReady和$ scope。$ whenReady命令提供支持。关于访问视图时,AngularJS将同时执行模板HTML和控制器。 这意味着,如果必须在控制器...

    ext简单例子

    Ext.onReady(function(){ var cm = new Ext.grid.ColumnModel([ {header:'Id',dataIndex:'id'}, {header:'Name',dataIndex:'name'},

    关于ExtJS4.1:快捷键支持的问题

    问题一个页面有两个面板,都...代码示例 代码如下:/// ”Ext/ext-all-debug-w-comments.js”&gt; Ext.onReady(function () { var viewport = Ext.create(‘Ext.container.Viewport’, { layout: { type: ‘vbox’, al

    ext js解析xml文档

    Ext.onReady(function(){    var store=new Ext.data.Store({   url:'GridData.xml',  reader:new Ext.data.XmlReader(  {record:'Item'},   ["ASIN","Author","Manufacturer","ProductGroup","Title"])  }...

    Ext深入浅出 数据传输

    11.1.1 onReady函数..........................256 11.1.2 get函数....................................257 11.1.3 query函数和select函数.....260 11.1.4 encode函数和decode函数...263 11.1.5 extend函数...........

Global site tag (gtag.js) - Google Analytics