2012-03-01 1 views
4

私はjQuery MobileをAMD用のRequireJSを使用するプロジェクトに組み込もうとしていますが、AMDモジュールとしてjQuery Mobileをロードしたくありません。この背後にある考え方は、アプリケーション固有のロジックにAMDを使用していますが、スクリプトタグを手動で定義するだけで、jQueryなどの外部ライブラリの依存関係はすべてグローバルスコープになります。jQuery MobileをAMD(RequireJS)から分離する

RequireJSスクリプトタグがRequireJSに匿名モジュールを定義させ、私が理解できない競合を引き起こす前に、jQueryモバイルのスクリプトタグを定義しているという問題があります。 jQueryとjQuery Mobileの両方のコードを見て、条件付きでdefine()メソッドが存在する場合はそれらを呼び出すように設定されています。 RequireJSが読み込まれる前にこれらのタグを含めるので、define()を呼び出すべきではありません。私はブレークポイントでこれを二重にチェックしました。

私はjQueryのモバイルが含まれている場合、私は次のエラーを取得する:

Error: Mismatched anonymous define() module: [object Object]

のjQuery Mobileはdefine()を呼び出していない場合、私はこれが起こっているか理解していません。私はここで間違って何をしていますか? jQuery Mobileの新しい条件付きAMDサポートでこれは何か?

答えて

4

ビルドされたバージョンのjQueryモバイルを使用する必要があります.jQueryモバイルが依存しているので、jqueryがスクリプトタグとして含まれていることに注意してください。

​​

私はそれが働くことを期待しています。私はRequireJSではなく、jQueryのモバイル、私はRequireJS 1.1のために修正したい何かに問題のこのより考える

<script src="scripts/require.js" data-main="scripts/app"></script> 
<script src="scripts/jquery.js"></script> 
<script src="scripts/jquery.mobile.js"></script> 

:あなたはこのようなスクリプトを持っている場合は、表示されるエラーが発生することがあります。しかし、スクリプトタグの最初のセットが機能するはずです。

もしそうでなければ、あなたのアプリケーションのJSモジュールがjQueryとjQuery mobileをどのように使っているかを知ることは興味深いでしょう。

+0

私は実際に私のスクリプトを自分のプロジェクトの最初の例のように設定していましたが、まだエラーが発生していました。 jQuery Mobile 1.1.0と別のライブラリ([js-signals](http://millermedeiros.github.com/js-signals/))の両方が含まれていて、条件付きでサポートされている場合に問題が発生していることがわかりましたAMD。私はチェックし、どちらのライブラリもdefineを呼び出していませんが、まだ不一致エラーが出ます。私は一緒に素早くPOC [ここ](https://github.com/jrolfs/RequireJS-External-Library-Test)を入れました。私はこれを見続けるつもりですが、私はAMDにとっては非常に新しいです。ご協力いただきありがとうございます。 – tomswift

+1

あなたはどのブラウザをテストしていますか?私はChromeとSafariで試してエラーを見ましたが、Firefoxで試してみるとうまくいきました。スクリプトタグを本体の代わりにヘッドに移動したとき、エラーはWebkitブラウザで消えてしまいました。だから、私はそれがWebkitブラウザと本文のコンテンツで奇妙な問題だと思っています。ですから、スクリプトを頭の中に置くか、requirejs(推奨)経由ですべてのlibsをロードしてください。 – jrburke

+0

それは変です。申し訳ありませんが、私はSafariでテストしていて、他のブラウザでもテストしたはずです。すべてのlibsをrequireでロードすることをお勧めしますが、jQueryやUnderscoreなどのユーティリティ駆動型ライブラリをグローバルスコープで使用する方が理にかなっているようです。したがって、AMDモジュールの依存関係はアプリケーションモジュールでありlibsではありません。そこに何かを誤解するかもしれない。私がこのように設定していたもう一つの小さな理由は、多くの図書館が現在AMDに追いついているように見え、これがAMD版のものを取り除くのを避けることができるということです。 – tomswift

関連する問題