注意:不要误将$.ready(..)
“jquery is ready”混为一谈,很多人都会这样做。$.ready(..)
告诉您文档本身何时准备就绪(完全解析),而脚本加载(尤其是带有像 LABjs 这样的库的动态类型)是完全独立的。在这里,您真的在寻找“jquery 是否已加载/准备好”,如果可能的话,它应该由您的脚本加载器处理。您可能还需要等待文档准备好,在这种情况下,您还应该使用$.ready(..)
. 但不要用一个代替另一个!
最简单的方法(但不一定是最好的)是在母版页中声明一个全局变量,该变量包含加载主 jquery 文件的 LAB 链,然后在子页面中将其链接。所以在母版页中:
var $jqLoading = $LAB.script("jquery.js");
在子页面中:
$jqLoading.wait(function(){
// my jquery code goes here
});
另一种选择是依赖 LABjs 重复数据删除脚本请求(默认行为),因此只需尝试在每个子项中加载 jquery,但使用与父项相同的 URL,并且 LABjs 将确保仅加载一个 jquery 副本,但是一旦加载完成,所有等待它的链都会收到通知。因此,在子页面中:
$LAB.script("jquery.js").wait(function(){
// my jquery code goes here
});
这可能效率稍低,但它避免了需要全局变量,这是更好的设计 IMO。
最复杂的解决方案是使用类似 Promise 的东西来表示 jQuery 脚本的加载,然后在每个子页面中链接该 Promise。这超出了我们将在这里介绍的内容,但是如果您有兴趣了解它们,那里有很多关于承诺的内容。