jqueryを、標準のクロージャを使用して定義された標準で非amd対応のjqueryプラグインと一緒に使用したいとします。(function($))($.fn.myplugin = { ... })(jQuery);
はすべてjs/libs/jquery/jquery.myplugin.js
の内部にあります。noConflictモードでjQueryを使用してrequire.jsに非AMD互換のjQueryプラグインをロードする正しい方法はありますか?
:
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']
}
});
私はグローバル名前空間の汚染したくないbecase私は、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?
});
ここで私は経験している問題です。上記のすべてのライブラリを問題なく定義しましたが、AMD以外の対応jqueryプラグインをロードするために正しいshim
設定を実行できませんでした。
私はをjquery
のdeps
と設定しようとしましたが、それ以外の方法では動作しませんでした。
私は次のシナリオで問題抱えているように思える:ノー競合モードで
- jQueryの負荷を。
- 上記のjQueryのインスタンスを拡張するプラグインコード実行
- プラグインコードで拡張されたアプリケーション内で$を使用できるため、$ .mypluginを使用できます。 私が漂って同様の質問を見てきましたが、それらのどれもが、実際に、このような「使用シムの設定」など漠然としか提案を与えて、この問題を解決していない
...
編集
私も使ってみました
"jquery-myplugin": {
deps: ["jquery"],
exports: "jQuery.fn.myplugin"
}
し、プラグイン・メソッドながら
が利用可能に一度AMDモジュールとして、このようにロードされ、私はまだすることができませんアクセス:$('.class').myplugin()
ドなどfault $オブジェクトはmypluginコードで拡張されていません。
これでも問題はありますか? – Louis
モジュールの依存関係は配列で表現する必要があります:define(['dep1'、 'dep2' ... 'depn']、function(dep1、dep2、... depn){}); (http://requirejs.org/docs/errors.html#requireargs) – Vikram
良いキャッチが、それはstackoverflow上の私のミスタイプだった、根本的な問題はまだそこにある – rochal