Скажем, я хочу использовать jquery вместе со стандартным подключаемым модулем jquery, не поддерживающим AMD, который был определен с использованием стандартного замыкания: (function($))( $.fn.myplugin = { ... } )(jQuery);
, и все это находится внутри js/libs/jquery/jquery.myplugin.js
.
Я использую этот конфиг:
require.config({
baseUrl: 'js/',
paths: {
'jquery': 'libs/jquery/jquery-noconflict',
'underscore': 'libs/underscore/underscore',
'backbone': 'libs/backbone/backbone',
'jquery-myplugin': 'libs/jquery/jquery.myplugin'
},
shim: {
'backbone': {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
},
'jquery-myplugin': {
deps: ['jquery']
}
});
Я загружаю jQuery в режиме отсутствия конфликтов в libs/jquery/jquery-noconflict.js
, потому что не хочу загрязнять глобальное пространство имен:
define(['libs/jquery'], function () {
return jQuery.noConflict(true);
});
и вот как я загружаю свой основной app.js:
define([
'jquery',
'underscore',
'backbone',
'jquery-myplugin'],
function($, _, Backbone, MyPlugin){
//MyPlugin is always undefined, not even sure if
//I should be passing it here if it only extends jQuery?
});
Теперь вот проблема, с которой я столкнулся: хотя я могу без проблем использовать все библиотеки, определенные выше, я не смог разработать правильную конфигурацию shim
для загрузки плагинов jquery без поддержки AMD.
Я пытался настроить jquery-myplugin
как deps
из jquery
(и наоборот), но так и не смог заставить его работать.
Кажется, у меня проблема со следующим сценарием:
- jQuery загружается в бесконфликтном режиме.
- код плагина запускается, расширяя экземпляр jQuery выше
- Я могу использовать $ в своем приложении, расширенном кодом плагина, поэтому доступен $.myplugin.
Я видел похожие вопросы, но ни один из них на самом деле не решает эту проблему, давая только расплывчатые предложения, такие как «использовать конфигурацию прокладки» ...
Изменить
Я также пытался использовать
"jquery-myplugin": {
deps: ["jquery"],
exports: "jQuery.fn.myplugin"
}
И хотя методы плагинов доступны после загрузки в качестве модуля AMD таким образом, я все еще не могу получить доступ: $('.class').myplugin()
поскольку объект $ по умолчанию не был расширен с помощью кода моего плагина.
define(['dep1', 'dep2'...'depn'], function(dep1, dep2, ...depn){});
как описано здесь - person Vikram   schedule 19.08.2014