簡體   English   中英

如何使用require.js加載帶有noConflict的jQuery

[英]How use require.js to load jQuery with noConflict

我試圖通過使用require在noConflict模式下加載jquery

require.config({
    paths: {
        'jquery': 'libs/jquery-req',
        underscore: 'libs/underscore',
        backbone: 'libs/backbone'
    },
    shim: {
        jquery: {
            init: function() {
                console.log('jq init');
                var jq = this.jQuery.noConflict(true);
                jq.support.cors = true;

                return jq;
            },
            exports: '$'
        },
        backbone: {
            deps: ['underscore', 'jquery'],
            init: function() {
                console.log('b init');
            },
            exports: 'Backbone'
        },
        underscore: {
            exports: '_'
        }
    }
});

並使用它:

define([
    'jquery',
    'underscore',
    'backbone'
], function(jq, _, Backbone) {
    console.log(jq);
    var initialize = function() {
//        Router.initialize();
    };

    return {
        initialize: initialize
    };
});

不幸的是,似乎從未調用過shim.jquery.init函數。 有人可以幫我理解為什么嗎? 當我重命名jquery時,有什么奇怪的 - > jquery-reg然后它似乎工作,但它需要更改每個文件中定義的依賴項。

創建以下noconflict.js模塊:

define(["jquery"], function($) {
  //drop the `true` if you want jQuery (but not $) to remain global
  return $.noConflict(true); 
});

然后,在require.config中添加:

map: {
  "*": {
    "jquery": "noconflict"
  },
  "noconflict": {
    "jquery": "jquery"
  }
}

jQuery的noconflict版本將交給所有模塊(noconflict除外)。 擺脫jQuery墊片。

請注意,將jQuery保留在全局命名空間之外的路徑將阻止您使用任何非AMD的jQuery插件而不將這些插件修改為AMD模塊。 Shim沒有做任何神奇的事情來利用這個設置。 對於你可能想要墊片的任何非AMD模塊都是如此,這取決於你做過的“純粹”AMD。

我正在使用這個:

require.config({
    paths: {
        jquery: 'libraries/jquery/jquery.min',
        underscore: 'libraries/underscore.min',
        backbone: 'libraries/backbone.min',
        jquery_ui: 'libraries/jquery/jquery.ui.min',
    },

    shim: {
        'backbone': {
            deps: ['underscore', 'jquery'],
            exports: 'Backbone'
        },
        'underscore': {
            exports: '_'
        },
        'jquery_ui': {
            deps: ['underscore', 'jquery'],
            exports: 'ui'
        }
    }
});

然后在我的應用程序中,我使用本地范圍來定義jquery的實例。 在下面的例子中,$是jquery,但它也可以是其他東西。

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

    'use strict';

    var app = Backbone.View.extend({
        el: 'body',

        initialize: function() { },

    });

    return app;

});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM