0

アプリでRequire.JSを使用するように切り替えたところ、すぐにこの問題に直面しました。

以前は、インラインJSを使用して、DOMの特定の部分が読み込まれると特定の呼び出しを開始していました。現在、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

相互に互換性のない2つのスクリプト手法を選択しました。

  1. jQueryの遅延ロード
  2. DOMがロードされるときのjQueryへのインライン呼び出し

両方を一緒に行うことはできません。本当にjQueryを延期してロードする必要がある場合は、jQueryがロードされるまでjQueryの使用も延期する必要があります。Required.jsには、jQueryがロードされたときに通知するオプションのコールバックがあります。その時点で、他の初期化jQueryコードを実行できます。

これらの両方を可能な限り維持したい場合は、インラインJSの各部分でコールバックをコールバックの配列に登録し、jQueryが読み込まれたときにこれらすべてのコールバックを実行する関数を作成できます。あなたが成し遂げようとしていることがこれほどの苦労の価値があるとしたら、私は少し驚かれることでしょう。

インラインJavaScriptをできるだけ早く実行したい場合は、jQueryから独立させる(いつでも実行できるようにする)か、jQueryのロードの延期を停止してDOMロードとして使用できるようにすることをお勧めします。

于 2012-06-19T03:05:19.953 に答える