0

LAB.js を使用して、asp.net マスター ページで JQuery を非同期的に読み込みます。問題は、私が使用することです

$( document ).ready(function() {
    //something
}); 

JQuery がマスター ページに非同期的に読み込まれているため、スクリプト エラー ($ is undefined) が発生します。

マスター ページで jQuery の非同期読み込みが完了するまで、子ページで jQuery コードの解析を延期するにはどうすればよいですか?

問題は、マスター ページからの JQuery の非同期読み込みと、子ページでの JQuery コードの使用です。どうすればそれができますか?

4

1 に答える 1

1

注:$.ready(..)多くの人がそうであるように、「jquery is ready」と混同しないでください。$.ready(..)は、ドキュメント自体の準備ができた (完全に解析された) ときに通知しますが、スクリプトの読み込み (特に LABjs のようなライブラリを使用した動的な種類) は完全に分離されています。ここでは、「jquery がロードされている/準備ができているか」を実際に探しています。これは、可能であればスクリプト ローダーで処理する必要があります。ドキュメントの準備が整うまで待つ必要がある場合あります。その場合は、 も使用する必要があります。ただし、一方を他方に置き換えないでください。$.ready(..)


最も簡単な方法 (必ずしも最善とは限りません) は、メインの jquery ファイルをロードしている LAB チェーンを保持するマスター ページでグローバル変数を宣言し、それを子ページでチェーンすることです。したがって、マスターページでは:

var $jqLoading = $LAB.script("jquery.js");

そして子ページでは:

$jqLoading.wait(function(){
   // my jquery code goes here
});

もう 1 つのオプションは、LABjs 重複排除スクリプト リクエスト (デフォルトの動作) に依存することです。そのため、各子で jquery のロードを試みますが、親と同じ URL を使用すると、LABjs は jquery のコピーが 1 つだけロードされるようにします。 、しかし、それを待っているすべてのチェーンは、1 つのロードが完了すると通知を受け取ります。したがって、子ページでは次のようになります。

$LAB.script("jquery.js").wait(function(){
   // my jquery code goes here
});

これは少し効率が悪いかもしれませんが、グローバル変数を必要としないため、IMO の設計が優れています。


最も洗練された解決策は、promise のようなものを使用して jQuery スクリプトの読み込みを表し、各子ページでその promise のチェーンを使用することです。これはここで取り上げる範囲を超えていますが、promise について知りたい場合は、promise についての情報がたくさんあります。

于 2015-05-26T23:31:15.387 に答える