2012-06-19 14 views
0

我切换到在应用程序中使用Require.JS,并立即面临此问题:如何在加载jQuery之前排队回调?

我曾经使用内联JS启动某些调用一旦某些部分的DOM加载。现在显然只有在这些调用被执行后才加载jQuery,从而导致错误,因为jQuery($)未定义。

jquery加载之前入队回调的最佳方式是什么?如果jQuery已经加载,我需要它们立即触发,或者立即加载它。

+0

我的意思是......如果你**绝对必须**为你的项目使用这种方法...然后我会使用〜300的setTimeout函数。 – Ohgodwhy

+1

我不认为setTimeout的是一个好方法,因为无法保证jQuery的文件将在300 ms内被加载。 –

回答

1

您选择两种互不相容的脚本技术:

  1. 的jQuery的延迟加载
  2. 内嵌调用的jQuery的DOM加载

你根本就做不到这两项的一起。如果你真的需要以延迟的方式加载jQuery,那么在加载jQuery之前,你还必须推迟使用jQuery。 Requires.js有一个可选的回调函数,可以让你知道何时加载jQuery。此时,您可以运行其他初始化jQuery代码。

如果你想保持尽可能多的这些,你可以让每一行内联JS将一个回调注册到一个回调数组中,然后创建一个函数,在jQuery加载时执行所有这些回调。如果你想要完成的事情值得这么多麻烦,我会感到有些惊讶。

我建议如果你想让内联JavaScript尽快执行,那么要么让它独立于jQuery(所以它可以随时运行),要么停止推迟jQuery的负载,以便它可以用作你的DOM加载。

2

这是我做的

var _DomReadyCallback = _DomReadyCallback || []; 

_DomReadyCallback.push(function() { 
    alert('Jquery Loaded'); 
}); 

jQuery是通过数组装载循环之后和调用所有的回调

// This code should come after jQuery is loaded (add it on the jQuery onload callback or append it at the end of the jQuery file) 
$(function(){ 
    for (var cb in _DomReadyCallback) { 
     cb.call(); 
    } 
}); 

OR

requirejs(['jquery'], function ($) { 
    for (var cb in _DomReadyCallback) { 
     cb.call(); 
    } 
}); 
相关问题