4

通常、requirejs モジュールは次のようになります。

define('ModuleName', ['jquery', 'underscore', 'backbone'], function($, _, Backbone){

});

私のセットアップのすべてのファイルにはアンダースコアとバックボーンが必要なので、それらを依存関係として定義することなく、モジュールで自動的に利用できるようにしたいと考えています。

次のようなものです:

define('ModuleName', ['jquery'], function($){
    $("div.someClass").addClass('hide'); // works
    var Model = Backbone.Model.extend(); // works too
});

これは可能ですか?

はいの場合、どのように、または何を探す必要がありますか?

4

1 に答える 1

2

関心のあるモジュールは、外部スコープに接続する必要があります。デフォルトでは、Backbone、Underscore、jQueryなどは、noConflict()を呼び出さない限り、グローバルスコープにアタッチされたままになります(すべてのモジュールがこの機能を提供するわけではありません)。モジュールをグローバルスコープにアタッチすることは優れたソリューションではありませんが、要求していることを達成し、とにかくデフォルトの動作です。より良い代替策は、名前付きサブモジュールに加えてそれらの依存関係を含む外部モジュール(または単にrequire()呼び出し)を定義することです。そうしないと、RequireJSを使用する理由の多くが失われます。

例を編集:

require(['underscore', 'backbone'],
    function (_, Backbone) {
        define('ModuleName', ['jquery'], function($){
            $("div.someClass").addClass('hide'); // works
            var Model = Backbone.Model.extend(); // works too
         });

        //Other modules here, otherwise this is pointless too
    }
);

これでも、同じファイルに複数の名前付きモジュールを定義している場合にのみ役立ちます。私の観点からの最善の解決策は、残念ながら、モジュールを明示的にインポートして暗黙的なモジュールの命名を許可することですが、上記の例は、求めているものに最も近いものです。暗黙のモジュール名については、RequireJS api docsから:

モジュールに明示的に名前を付けることはできますが、モジュールの移植性が低下します。ファイルを別のディレクトリに移動する場合は、名前を変更する必要があります。

于 2012-07-07T06:10:39.680 に答える