0

RequireJS を調べてみると、未定の順序でダウンロードされるが決定された順序で評価される Head.JS とは異なり、RequireJS は異なるようです。

通常、RequireJS はスクリプトを未定の順序でロードして評価します。

次に、注文を前置する方法を示します。明示的な順序などのスクリプト名に。

次に例を示します。

require(["jquery", "jquery.alpha", "jquery.beta"], function($) {
    //the jquery.alpha.js and jquery.beta.js plugins have been loaded.
    $(function() {
        $('body').alpha().beta();
    });
});

したがって、jquery.alpha がダウンロードされ、jquery の前に評価された場合、これは確かに問題を引き起こすでしょうか? 上記の関数本体などのクライアント コードの使用法を忘れて、ほとんどのプラグインのように jQuery.fn にアタッチすると、評価の段階で jQuery はこのシナリオで未定義になります。

ここで何が欠けていますか?

4

3 に答える 3

18

RequireJS はプレーンな JavaScript をロードするのではなく、定義済みのモジュールをロードするように設計されています。モジュール形式は次のようになります。

define(['a', 'b'], function(a, b) {
    return { zzz: 123 };
});

注意すべき重要な点は、すべてのモジュール コードが無名関数内にあるということです。したがって、ファイルが任意の順序で実行されても、モジュールを登録するだけなので問題ありません。次に、モジュール コードが依存関係の順序で実行され、戻り値がモジュール オブジェクトになり、モジュールを使用するコードにパラメーターとして渡されます。

プレーン ファイルを読み込もうとしている場合、これは正しく機能しません。orderその場合、ロード順序を強制するプラグインがあります。

于 2011-06-25T23:54:39.587 に答える
1

この例では、一緒にパッケージ化された「requirejs と jquery」のカスタム バージョンを使用していることに注意してください。これは、jquery が常に最初に利用可能になることを意味すると考えています。

問題がある場合は、いつでもモジュール定義内にプラグインをラップし、プラグインが jquery 自体に依存していることを確認して、順序が正しいことを確認できます。

/* SPECIAL WRAPPING CODE START */
define(['jquery'], function(jQuery) {


// .... plugin code ....


/* SPECIAL WRAPPING CODE END */
});
于 2011-09-23T12:45:51.107 に答える
0

例外が発生する順序を支援するものがなくても、あなたは正しいです。幸いなことに、RequireJSにはこれを支援するOrderプラグインがあります。

私は現在RequireJSを評価しています...

そして、これが私のファイルの1つの例です:
「注文!」コマンドはファイルを順番にロードします。(その後)コールバックを使用して、他の(サポート)ファイルをロードできます。

<script src="Loaders/RequireJS/requireJS.js" type="text/javascript"></script>
<script src="Loaders/RequireJS/order.js" type="text/javascript"></script>
<script type="text/javascript">

    require(["Loaders/RequireJS/order!././Includes/JavaScript/jQuery/Core/jquery-1.3.2.js",
        "Loaders/RequireJS/order!././Includes/JavaScript/jQuery/Core/jquery.tools.min.js",
        "Loaders/RequireJS/order!././Includes/JavaScript/jQuery/ThirdPartyPlugIns/jquery.tmpl.js"], function() {

        require(["././Includes/JavaScript/jQuery/jGeneral.js",
            "././Includes/JavaScript/jQuery/autocomplete.js",
            "././Includes/JavaScript/jQuery/jquery.ErrorWindow.js",
            "././Includes/JavaScript/jQuery/jquery.ValidationBubble.js",
            "././Includes/JavaScript/jQuery/jquery.Tootltip.js",
            "././Includes/JavaScript/jQuery/jquery.Extensions.js",
            "././Includes/JavaScript/jQuery/jquery.Toaster.js"], null);

        require(["././Includes/JavaScript/jQuery/ThirdPartyPlugIns/jquery.dimensions.js",
            "././Includes/JavaScript/jQuery/ThirdPartyPlugIns/jQuery.Color.Animations.js",
            "././Includes/JavaScript/jQuery/ThirdPartyPlugIns/jquery.corners.min.js",
            "././Includes/JavaScript/jQuery/ThirdPartyPlugIns/jquery.tipsy.js",
            "././Includes/JavaScript/jQuery/ThirdPartyPlugIns/jquery.numberformatter-1.1.0.js",
            "././Includes/JavaScript/jQuery/ThirdPartyPlugIns/jquery.tipsy.js"], null);
    });
</script>

正直
に言うと、 私はさまざまな非同期リソースローダーを調べていますが、必要なすべてを実行するローダーを見つけるのに苦労しています。また、それぞれのドキュメントが不足していることもわかりました。

于 2011-05-19T20:25:38.427 に答える