コメントのスペースが足りなくなり、コードを含めたいと思ったので、2番目の回答を作成しています。
@timDunhamが投稿したものは、ほとんどの場合かなり良いものですが、理解を深めるために誰かがチャイムを鳴らす可能性のある追加機能がいくつかあります。
コード内:
define([
'jquery'
'libraries/backbone'
]
アンダースコアが欠落していると思います。まず、Backboneを動作させるにはアンダースコアが必要ですが、アンダースコアがないと壊れてしまうと思います。次に、アンダースコアとバックボーンのAMDJSフォークを使用していない限り、AMDをサポートしていません。v1.3.0で削除されたAMDサポートにアンダースコアを付けます。非AMDアンダースコアとバックボーンを使用していると仮定すると、それらはおそらくに属していないため、代わりに使用するdefine[]
必要がありrequire[]
ます。
したがって、AMDJSバージョンを適切に使用している場合、適切な定義は次のようになります。
define([
'jquery',
'underscore',
'Backbone'
], function($, _, Backbone) { ... });
これは、requireconfigでパスを作成したことを前提としています。
require.config({
paths : {
jquery : 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min',
underscore : '../../libs/js/underscore/underscore.min',
Backbone : '../../libs/js/backbone/backbone',
}
});
AMDJSバージョンを使用しない実装を見てきましたが、それらは非同期モジュールではないため、正しい順序でロードされていることを確認する必要があります。
これは、依存関係をロードする正しい順序を保証するものではないと思います。
require({
baseUrl: '/'
},[
'jquery',
'app/views/movieRow',
'app/models/movie',
'libraries/backbone'
],
依存関係としてリストされているものがあるため、必要なときに読み込まれるとは限りません。非同期モジュールの場合は問題ありませんが、この例では言及されていないので、AMDではないと想定します。このモジュールは、jquery、movieRow、movie、およびバックボーンに依存します。しかし、バックボーンがjqueryの前にロードしようとすると...(x_x)なぜ世界なのか?
そのため、require.jsにはorderというプラグインがあると思います。救助へ。注文あり!依存関係を設定すると、スクリプトが...まあ...順序でロードされます。このようなもの:
require({
baseUrl: '/'
},[
'order!jquery',
'app/views/movieRow',
'app/models/movie',
'order!libraries/underscore', // <- Don't forget me!
'order!libraries/backbone'
]
これにより、モジュールはjqueryが最初にロードされ、次にアンダースコア、次にバックボーンがロードされることを評価および保証すると思います。この場合、誰が気にしますが、movieRowまたはmovieの保証はありません。:-)
私はプロジェクトにAMDJS-BackboneフォークとAMDJS-Underscoreフォークを使用しているので、通常はそれらをに入れて、問題define[]
なく動作します。RequireJSは本当に素晴らしく、私のコードを大幅にクリーンアップしました。どこに行ってもJRBurkeは、RequireJSのライターがいたるところに現れ、require.jsに関するすべてのコメントについて、彼はいつも非常に役に立ちます。そして、私はすべてを意味します。私の理論では、彼はテレパシーでRequireに接続しており、Web上でrequirejsの新しいインスタンスが発生するたびに、その知識にすぐにアクセスできます。このスレッドの議論が続けば、彼もここに現れて挨拶するでしょう。
私の免責事項は、私もRequireに慣れていないため、誤解している可能性があるということです。しかし、私が知っていることから、これらの追加のポインターと情報は、requireを使用してより良いコードをまとめるのに役立つかもしれないと思いました。
参考資料: