2

requirejs も使用するアプリケーションで、breezejs をロードすると、奇妙な動作が発生します。

主な問題は、そよ風 (およびその依存関係 q と jquery) をロードするように設定すると、そよ風の依存関係としてノックアウトが設定されない限り、そよ風がロードに失敗することです。

不明なエラー: モジュール名 "ko" は、コンテキスト: _ に対してまだロードされていません。require([]) を使用する

実際にノックアウトを使用したい場合は問題ありませんが、Angular を使用しています。ノックアウトをロードしても何も壊れることはないと思いますが、慣れないのであればダウンロードするのは時間の無駄です。

それで、私の最初の質問は、requirejs を使用しているからといって、なぜそよ風にノックアウトが必要なのですか? 私にはバグのようです。

その他の WRT の風変わりな動作は、require をロードしてから、require を使用せずに Breeze をロードすると、breeze がロードに失敗することです。

キャッチされないエラー: 匿名の define() モジュールが一致しません...

そのそよ風は、requireがロードされた場合、そのそよ風はrequireによってロードされると想定しているようです。しかし、これを想定するのは飛躍のようです。以前の問題を最初に発見してから、この問題に遭遇しました。私は風を自分でロードするだけでいいと思っていました。もちろん、アプリの他の部分は require に依存しているため、require はまだロードされていました。

2 番目の質問は、require の前に、なぜ Breeze をロードする必要があるのですか? 2 つのライブラリは相互に依存していないため、奇妙に思えます。必要なロード順序があるのはなぜですか?

4

1 に答える 1

0

風のウェブサイトから:

Breeze は、NuGet およびダウンロード パッケージに含まれている 1 つのサード パーティ JavaScript ライブラリ Q.js に依存しています。Q.js は、非同期 JavaScript を管理するための Common.js promises 標準の一般的な実装です。

これは、Q.js をロードした場合、requirejs と競合する可能性があることを意味します。これは、AMD ローダーの実装が異なるためです。

また:

特に明記されていない限り、他のサンプルもこれらのライブラリを必要とし、Q および Breeze スクリプトの前に jQuery および Knockout スクリプトをロードします。彼らのリードに従うようにしてください...または、なぜあなたが違うことをしているのかを理解してください.

ノックアウトせずに逃げるように設定できるはずです。ソースコードの内容は次のとおりです。

可能なオプションは「ko」、「backingStore」または「backbone」です。Breeze.config.initializeAdapterInstances メソッドを参照してください。

http://www.breezejs.com/sites/all/apidocs/classes/config.html

お役に立てれば。

更新: Breeze のソースを見ると、require loader が存在するかどうかがわかります。ノックアウトを 'ko' としてロードしようとします。これを回避するには、何も返さないか false を返す独自の「ko」モジュールを定義することで、requireJS ローダーを構成できるはずです。次に、そよ風は「backingStore」にフォールバックし、それについて文句を言うべきではありません。

UPDATE BY WARD (2013 年 5 月 20 日) : v.1.3.3 以降のバージョンで修正されます。一時的なアドバイスを提供し、修正を発表するこの最新の SOを参照してください。

于 2013-05-02T03:04:19.307 に答える