3

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 は、従来のページが既にロードしている可能性があるものを二重にロードするだけなので、それは不可能に思えます。

4

1 に答える 1

3

答えは、モジュールローダーを使用してすべてのJavaScriptをロードし、振り返らないことです。私はそれが唯一の解決策だと真剣に考えています。ほとんどのクライアントサイトがまだその時点に到達していない世界でモジュールローダーを使用するウィジェットを開発すると、古い学校の考え方を使用するようになります。

今、私が+50ポイントを得ることができれば、私はこの質問に腹を立てました:)

于 2012-04-13T23:03:33.227 に答える