2

backbone-deep-model は RequireJS で使用するための AMD サポートを持っていますが、AMD 互換ではない underscore.mixin.deepExtend.js と呼ばれる外部ファイルのアンダースコア mixinに依存しています。

この質問を見る: RequireJS で Underscore プラグインをミックスする方法は? 、RequireJSのshim init設定内で、deepExtendをUnderscoreに手動でミックスインできるようです。

...
shim: {
    ...

    'deep-model': {
        deps: 'underscore',
        init: function() {
            _.mixin(/* hash of deepExtend functions */);
            return _;
        }
    }
}
...

ただし、underscore.mixin.deepExtend は _.mixin() が必要とする関数のハッシュを返さないため、この時点で何をすべきかで行き詰まっています。

ソース コードを変更せずに RequireJS でバックボーン ディープ モデルをロードする方法はありますか?

4

2 に答える 2

3

これはあなたが求めている答えではないかもしれませんが、私が個人的にアドバイスしたいオプションの 1 つは、Underscore (およびすべてのミックスイン、そしておそらく Backbone と jQuery) を Require から完全に除外することです。このアプローチの主な利点は (副作用として問題を解決することを超えて)、同じライブラリ (または Backbone/jQuery で同じことを行う場合はライブラリ) をインポートすることによって、すべての require モジュールを開始する必要がないことです。

確かに、これはグローバル空間をわずかに「汚染」しますが、私の意見では、グローバル名前空間に_(または$またはBackbone) 変数を使用しても問題はありません。ただし、それは問題を解決し、シムの必要性をまったく回避し、多くのインポートを節約します。もちろん、変数をグローバル名前空間を「汚染」しないようにすることで、将来の頭痛の種を回避できるため、独自のコードに Require を引き続き使用できます (使用する必要があります)。

ちょっとした考え。

于 2013-02-10T04:49:21.890 に答える
0

依存関係としてバックボーンをシムできます。

shim: {
  // this is an example, I don't know what are the actual dependencies are
  'deep-model': ['backbone', 'underscore']
}

依存関係として追加すると、バックボーンで動作します。

define(['backbone', 'deep-model'], function(Backbone) {
   // backbone now has deepModel in it
});
于 2013-02-10T07:36:07.383 に答える