(function($))( $.fn.myplugin = { ... } )(jQuery);
jquery を、標準の Closure:を使用して定義された、amd 非対応の標準の 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']
}
});
libs/jquery/jquery-noconflict.js
グローバル名前空間を汚染したくないので、jQuery を非競合モードでロードします。
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
AMD 対応でない jquery プラグインをロードするための正しい構成を見つけることができませんでした。
現在(およびその逆)の設定を試みましたjquery-myplugin
が、機能させることができませんでした。deps
jquery
次のシナリオに問題があるようです。
- jQuery は非競合モードで読み込まれます。
- プラグイン コードが実行され、上記の jQuery のインスタンスが拡張されます
- アプリケーション内で $ をプラグイン コードで拡張して使用できるため、$.myplugin を使用できます。
同様の質問が浮かんでいるのを見たことがありますが、実際にこの問題を解決するものはなく、「シム構成を使用する」などの漠然とした提案しかありません...
編集
私も使ってみました
"jquery-myplugin": {
deps: ["jquery"],
exports: "jQuery.fn.myplugin"
}
この方法で AMD モジュールとしてロードされると、プラグイン メソッドが利用可能になりますが、アクセスできません$('.class').myplugin()
。