2

私は AMD の環境で作業しており、そのために Require.js を使用しています。また、フレームワークとして KnockOut を使用します。ここでの問題は、ノックアウトに大きく依存するノックアウト用のプラグインをダウンロードしたところです。

私のアプリケーションの AMD の性質は正確にはわかりませんが、プラグインが正しく動作せず、プラグインのロード中に Ko が定義されていないというエラーがスローされます。

同様の問題に直面したことがある人からの提案はありますか?

4

2 に答える 2

4

参照するプラグインが Mapping プラグインである場合、次のいずれかを実行する必要があります。

  1. ノックアウト スクリプト ファイルに「knockout.js」という名前を付けます。

  2. 自分の名前と一致するように、マッピング スクリプトの define メソッドを手動で変更します。これは、デバッグ マッピング スクリプトの 12 行目からです。

それが別のプラグインである場合は、より役立つようにどのプラグインかをお知らせください。

于 2012-09-20T21:06:07.133 に答える
2

素晴らしいリード、私は昨夜3時間ほどこれで迷子になったので、これが取引です:マッピングプラグイン(たとえば)が、必要なrequirejsの場合、ノード、commonjs、またはamdのノックアウトへのハードコードされた依存関係を定義しますノックアウトプラグインの「ルート」または「パス」を指定するには、たとえば、ノックアウトファイルの名前をko.jsに変更し、ko.mapping.jsにマッピングします。これらは、パス構成で「lib」に名前を変更したフォルダープラグインにあります。

require.config({
    baseUrl: "js/",
    paths: {
        "lib" : "plugins"
    }
});

その場合、マッピングプラグインで名前を変更する必要がある行は同じですが、バージョン番号は異なります。必要なのは、koファイルの場所を入力することだけです。

if (typeof require === "function" && typeof exports === "object" && typeof module === "object") {
    // CommonJS or Node: hard-coded dependency on "knockout"
    factory(require("knockout"), exports);
} else if (typeof define === "function" && define["amd"]) {
    // AMD anonymous module with hard-coded dependency on "knockout"
    define(["lib/ko", "exports"], factory);
} else {
    // <script> tag: use the global `ko` object, attaching a `mapping` property
    factory(ko, ko.mapping = {});
}

私の経験では、koファイルをlibの下に置き、名前をkoに変更しました。そのため、ファイルが「js / knockout /」フォルダーの下にあり、名前がknockout-debbug-last-2.2.0.jsに変更された場合は、同じ行を変更する必要があります。に

define( [ 'js/knockout/knockout-debbug-last-2.2.0' ] , factory );

そのハードコーディングされた行が、プラグインのロードを失敗させる原因です。

注:コメントのコードは非常に見栄えが悪いため、コメントではなく回答としてこれを記述しました。

于 2012-12-19T19:11:03.697 に答える