0

我切换到在应用程序中使用 Require.JS 并立即遇到了这个问题:

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

在加载之前为 jQuery 排队回调的最佳方法是什么?如果 jQuery 已经加载,我需要它们立即触发,或者一旦加载就立即触发。

4

2 回答 2

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();
    }
});

或者

requirejs(['jquery'], function   ($) {
    for (var cb in _DomReadyCallback) {
        cb.call();
    }
});
于 2012-06-19T04:00:08.653 回答
1

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

  1. 延迟加载 jQuery
  2. 加载 DOM 时对 jQuery 的内联调用

你根本不能同时做这两个。如果您确实需要以延迟方式加载 jQuery,那么您还必须延迟使用 jQuery,直到加载 jQuery。Requires.js 有一个可选的回调,可以让你知道 jQuery 何时加载。此时,您可以运行其他初始化 jQuery 代码。

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

我建议,如果您希望内联 javascript 尽快执行,那么要么使其独立于 jQuery(因此它可以随时运行),要么停止延迟 jQuery 的加载,以便它可以用作您的 DOM 加载。

于 2012-06-19T03:05:19.953 回答