4

グローバル jQuery オブジェクト (window.$ とおそらく window.jQuery) を取り除きたいです。

データメイン:

require.config({
    paths: {
        "jquery": "jquery-2.0.0"
    },
    shim: {
        "bootstrap": {
            deps: ["jquery"]
        },
        "jquery": {
            deps: [],
            init: function() {
                return this.jQuery.noConflict(true);
            },
            exports: "jQuery"
        }
    }
});

require(["jquery", "bootstrap"], function($) {
    // ...
});

このコードの何が問題になっていますか? 「init」は呼び出されません。

4

2 に答える 2

4

最近更新された RequireJS サイトのUse with jQueryページでは、この問題が発生する理由と解決方法について詳しく説明しています。関連する部分は次のとおりです。

jQuery は、AMD/RequireJS を検出した場合でも、自身をグローバル変数「$」および「jQuery」として登録します。AMD のアプローチでは、グローバル関数を使用しないようにアドバイスしていますが、これらの jQuery グローバルをオフにするかどうかは、それらに依存する AMD 以外のコードがあるかどうかによって決まります。jQuery には、グローバル変数の制御の解放をサポートする noConflict 関数があり、これは、後で説明するように、require.config で自動化できます。

また、これらのグローバル関数を抑制したい場合は、configmapではなく noConflict ラッパー モジュールへの config を使用する必要がありますshim。@tomaskirda が指摘したように、jQuery はshim.initAMD をサポートするライブラリでは起動しません。Use with jQueryページからの関連コード:

require.config({
    // Add this map config in addition to any baseUrl or
    // paths config you may already have in the project.
    map: {
      // '*' means all modules will get 'jquery-private'
      // for their 'jquery' dependency.
      '*': { 'jquery': 'jquery-private' },

      // 'jquery-private' wants the real jQuery module
      // though. If this line was not here, there would
      // be an unresolvable cyclic dependency.
      'jquery-private': { 'jquery': 'jquery' }
    }
});

// and the 'jquery-private' module, in the
// jquery-private.js file:
define(['jquery'], function (jq) {
    return jq.noConflict( true );
});
于 2013-06-28T13:23:55.780 に答える
4

jQueryAMDモジュールを実装しており、シムが必要ないため、おそらく呼び出されません。

于 2013-05-24T20:55:09.843 に答える