2

require.jsの仕組みを完全には理解していないと思います。これが私が作成した単純なモジュールです:

requirejs.config({
  paths: {
    'underscore'    : 'libs/underscore-min',
    'backbone'      : 'libs/backbone-min'
  }
});

define([
  "underscore",
  "backbone"
  ], function(_, Backbone) {
    console.log(_);
    console.log(Backbone);
    var MyCollection = Backbone.Collection.extend({
        initialize: function() {
            this.on("all", function(event) {
                console.log(event);
            });
        }

    });

    return MyCollection;
});

私は自分のhtmlからそれをロードします:

<script data-main="js/mycollection.js" src="js/libs/require.min.js"></script>

問題は、断続的に動作することです。バックボーンオブジェクトが必要なときに関数に含まれることもあれば、含まれないこともあります(http://requirejs.org/docs/errors.html#notloadedエラーが発生します)。ブラウザでリロードを押すと、50/50の変更が機能します。

ここでは本当に基本的なものが欠けているに違いありません。報告されたエラーは私には意味がありません。require.jsメカニズムの全体的な考え方は、すべての依存関係が読み込まれたときにのみ関数が呼び出されるということだと思いました。

4

2 に答える 2

5

アンダースコアとバックボーンはAMDモジュールとして定義されていないため、require.jsはアンダースコアがバックボーンの依存関係であることを認識していません。したがって、50%のケースで発生するのは、Backboneがアンダースコアを使用しようとしたときにアンダースコアがロードされないことだと思います。

require.js shim config http://requirejs.org/docs/api.html#config-shimを使用して、require.jsに依存関係の構造を伝えることができます。

于 2012-08-13T07:14:19.280 に答える
3

私の推測では、AMDバージョンのアンダースコアとバックボーンを使用していないと思います。その場合、2つのパッケージがAMDモジュールとしてラップされていない場合、モジュール用のdefine関数は正常に機能しません。

モジュール以外のjsスクリプトの場合、より適切な形式はrequire()関数を使用することです。

または-AMDバージョンのアンダースコアとバックボーンはここにあります。AMDのサポートは、ある時点でアンダースコアとバックボーンから削除されました。

AMDアンダースコア

AMDバックボーン

于 2012-08-12T23:09:04.973 に答える