Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ext.onReady()vs$(document.ready())_Javascript_Jquery_Dom_Extjs_Extjs4 - Fatal编程技术网

Javascript Ext.onReady()vs$(document.ready())

Javascript Ext.onReady()vs$(document.ready()),javascript,jquery,dom,extjs,extjs4,Javascript,Jquery,Dom,Extjs,Extjs4,有什么区别?我在$(document)上有一个ready函数,它应该检查是否加载了extjs,但主要问题是extjs没有及时加载$(document)中的内容。ready开始执行,extjs create函数在Ext.create(“…”,{..})上产生主要错误“无法执行未定义的创建”;线路。如果我像这样重复检查: $(document).ready(function() { Ext.onReady(function() { Ext.create('Ext.Button

有什么区别?我在$(document)上有一个ready函数,它应该检查是否加载了extjs,但主要问题是extjs没有及时加载$(document)中的内容。ready开始执行,extjs create函数在Ext.create(“…”,{..})上产生主要错误“无法执行未定义的创建”;线路。如果我像这样重复检查:

$(document).ready(function() {
    Ext.onReady(function() {
        Ext.create('Ext.Button', {...});
    });
});
var extReady = false;
var jQueryReady = false;

var librariesReady = function () {
    if (jQueryReady && extReady) {
        //They're both ready
    }
};

$(document).ready(function () {
    jQueryReady = true;
    librariesReady();    
});
Ext.onReady(function () {
    extReady = true;
    librariesReady();
});
事情神奇地发生了。现在我正在使用ext-all.js,它已经缩小了约1.3MB,这是一个相当大的imho…当他进行第二次检查时,东西会神奇地加载…但我认为这两个函数与它们的定义不一样,因为如果我放置另一个$(document.ready)而不是ext.onReady()行,东西会再次崩溃。我认为Ext.onReady({});函数会执行$(document).ready()不会的其他黑魔法,如果有人知道这种魔法是什么,我很感兴趣

因为它是有效的,我不知道为什么会让我痛苦

感谢您阅读本文。=)
另外,我使用ExtJS大约有一天了,所以我对它很陌生。

他们都会检查DOM何时准备好。 如果在使用jQuery时需要加载Ext,请尝试反转逻辑(不知道它是否可以工作,还没有尝试过)


关于这个主题的另一个StackOverflow问题:

不,它们不一样,第一个将在加载jQuery库时执行,Ext.onReady(…将在加载ExtJS库时执行

如果你想把它们结合起来,你可以这样做:

$(document).ready(function() {
    Ext.onReady(function() {
        Ext.create('Ext.Button', {...});
    });
});
var extReady = false;
var jQueryReady = false;

var librariesReady = function () {
    if (jQueryReady && extReady) {
        //They're both ready
    }
};

$(document).ready(function () {
    jQueryReady = true;
    librariesReady();    
});
Ext.onReady(function () {
    extReady = true;
    librariesReady();
});
Ext.onReady()
$(document).ready()
与当前接受答案所建议的加载任何一个库无关

根据文档,这两个都是关于正在加载和准备的DOM的

文档
  • Ext JS:
  • jQuery:
你的案子的答案 您可能在脚本启动后加载Ext JS资源,但jQuery已经在脚本上方加载。因此,使用jQuery等待DOM加载可以确保DOM已经加载,因此在此之前Ext JS也已经加载

如果您尝试先反转它们和我们Ext JS,则可能会出现错误

根据文档,它们正在做相同的事情,因此不需要嵌套它们

此场景的修复程序 如果您像这样加载资源
  • jQuery
  • 你的剧本
  • Ext JS
  • 最好按此顺序加载它们
  • jQuery和/或ExtJS
    • 秩序并不重要,因为他们可以自己站起来,而不需要一个或另一个
  • 你的剧本
  • 补充说明 由于DOM在读取您的脚本时是如何加载和解析的,因此它保证jQuery和Ext JS可用。这就是为什么您可以在脚本中引用它们的库;您不必等待它们加载它们已经存在并且可以使用的原因,这就是为什么您可以调用它们并使用它们的就绪调用

    您需要使用其中一个库的就绪事件来保证所有元素都加载到DOM中并可访问。在DOM就绪之前,您也不应该尝试向DOM添加任何内容,尽管您可以将其附加到已加载到元素/脚本标记上方的当前元素。最好不要触摸直到加载完成


    其他解释没有人要求你比我快:)好的一+1(你可能会提到脚本的加载顺序,因为这也可能会产生错误)是的,我完全同意它们与它们的定义不完全相同。事实上,我有很多更复杂的故事,但这是解决方案的本质。然而,我仍然想知道他如何检查自己是否有子弹?如果未加载Ext.onReady()函数,那么如果库未按时加载此函数,Ext.onReady()函数是否也会删除错误“undefined”?我对整个自检过程(extjs和jquery)非常感兴趣。因为这两个函数的作用确实不同…编辑:+1从我到=)好的,我在这里找到了困扰我的答案。。。谢谢大家的回答,尤其是约翰。这是错误的。jQuery只包含一个js文件,因此无需等待jQuery加载。ready()检查DOM是否就绪。onReady()检查是否加载了ExtJS类以及DOM是否准备就绪。我认为被否决的穷人@Mini0n的答案更正确。@MarcoSulla是正确的,这个答案是错误的。根据这两个文档,它们都是用于DOM就绪事件处理的。两者都不是关于正在加载的库。我添加了我自己的答案,更深入地挖掘了库被加载的想法以及准备好的事件正在完成什么。当DOM就绪时,jquery就绪将加载。当DOM和Ext准备就绪时调用Ext.onReady。如果它们相同,则不需要同时调用它们。onReady()表示等待DOM准备就绪并加载所有必需的类。