knockout.mapping プラグインを RequireJS と組み合わせて使用すると、この問題が発生します。基本的に、私のアプリをホストしているサイトは、knockout、knockout.mapping、requirejs をこの順序でロードしています。
<script src="http://127.0.0.1/scripts/require.js" type="text/javascript"></script>
<script src="http://127.0.0.1/scripts/knockout.js" type="text/javascript"></script>
<script src="http://127.0.0.1/scripts/knockout.mapping.js" type="text/javascript"></script>
さらに何もしなくても、この不一致エラーが発生します。私が気付いていないある種の秩序はありますか?
/// アップデート ///
私はこれらの2つのテストを書きました:
基本的に、require.js を自分のプロジェクトに読み込むと、マッピング プラグインの前に、マッピング プラグインが見えなくなります。これは、マッピングプラグインがrequireをrequireとノックアウトに使用する方法に関係していると思います...しかし、失敗する理由を突き止めることはできません.
/// 2回目の更新 ///
ここではシナリオが重要なようですので、もう少し背景を説明します。
スクリプトタグでknockout.jsとknockout.mapping.jsを定義するWebアプリケーションを想像してください。次に、requireJS を使用して依存関係を確立するサード パーティのウィジェットがページに読み込まれます。問題を引き起こしているように見えるのは、その読み込みです。一部のライブラリは旧式の手動の方法でロードされ、他のライブラリは require を使用してロードされたため、require は既存のライブラリのコンテキストを混乱させているようです。
ホスト アプリケーションから require への参照を削除すると、ko.mapping が存在するかどうかを確認するために戻ってきたときにエラーが発生します。これは明らかに、ウィジェットがノックアウトの要求を行ったため、マッピング プラグインとの関係が何らかの形で壊れたためです。
これらのライブラリのスタックについてコメントするには、RequireJS に精通している人が必要だと思います。明らかに、匿名で消費するウィジェットを作成しているとき、消費者がどのように、またはどのように requireJS を使用しているかはわかりません。
/// 3 回目の更新 /// 問題を可能な限り明確にしようとすると、おそらくこれがより理にかなっています。
リソースを手動でロードする既存の Web ページに、RequireJS を使用するウィジェットを挿入できる、明確に定義されたパターンはありますか? RequireJS は、従来のページが既にロードしている可能性があるものを二重にロードするだけなので、それは不可能に思えます。