区别是什么?我有$(document).ready函数,它应检查extjs是否已加载,但主要问题是extjs没有按时加载,$(document).ready内部的东西开始执行,extjs create function产生主错误'无法在Ext.create(“...”,{..})上执行undefined'的创建;线。如果我像这样进行双重检查:
$(document).ready(function() {
Ext.onReady(function() {
Ext.create('Ext.Button', {...});
});
});
事情神奇地起作用。现在我正在使用ext-all.js,它有~1.3MB的缩小,这是非常大的imho ......当他进行第二次检查时,事情变得神奇地加载......但我认为这两个函数不同于它们定义建议,因为如果我放入另一个$(document).ready而不是Ext.onReady()行,事情就会再次破裂。我想Ext.onReady({});函数做了一些其他黑魔法,$(document).ready()没有,如果有人知道这种魔法是什么,我很感兴趣?
因为它有效,我不知道为什么会杀了我。
感谢您阅读该帖子。 =) PS。我正在使用ExtJS大约一天,所以我对它很陌生。
答案 0 :(得分:21)
不,它们不一样,第一个将在你的jQuery库加载时进行处理,Ext.onReady(..将在你的ExtJS库加载时进行处理。
如果你想要将它们组合起来,你可以这样做:
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();
});
答案 1 :(得分:0)
他们都检查DOM何时准备就绪。 如果在使用jQuery时需要加载Ext,请尝试反转逻辑(不知道它是否可行,还没试过)。
Ext.onReady(function() {
$(document).ready(function() {
Ext.create('Ext.Button', {...});
});
});
关于此主题的另一个StackOverflow问题:Extjs + jQuery together
答案 2 :(得分:0)
Ext.onReady()
和$(document).ready()
与当前接受的答案所建议的加载两个库无关。
根据文档,两者均与正在加载并准备就绪的DOM有关。
脚本触发后,您可能正在加载Ext JS资源,但是jQuery已被加载到脚本上方。因此,使用jQuery等到DOM被加载时,可以确保DOM已被加载,从而确保了Ext JS的加载。
如果您尝试将它们反转,而我们首先使用Ext JS,则可能会出错。
根据文档,它们正在做相同的事情,因此您不必嵌套它们
由于DOM在读取脚本时是如何加载和解析的,因此可以保证jQuery和Ext JS可用。这就是为什么您可以在脚本中引用它们的库的原因。您不需要等待他们加载它们就已经可以使用,这就是为什么您可以给他们打电话并使用他们的现成电话的原因。
您需要使用其中一个库的ready事件,以确保所有元素都已加载到DOM中并可供访问。尽管您可以将所有内容附加到元素/脚本标签上方已加载的当前元素上,但也不要尝试在DOM中添加任何内容。最好的做法是在完成加载之前不要接触DOM。
处理DOM就绪要比这些库更复杂,这就是为什么它们都包含此类事件处理程序的原因。
下面的链接使用Vanilla JS解释了如何不仅添加事件监听器,还需要在添加DOM的事件监听器时检查事件监听器是否已经触发。这是处理事件的一种常见情况-在创建竞争条件之前,事件可能在开始监听之前就触发了-因此,如果没有其他检查方法,就不会知道该事件曾经发生。